我想重定向去http://example.com到https://example.com需要重定向所有流量到https
同任何流量http://example.com/about到
我认为这将是这样的:
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
我想重定向去http://example.com到https://example.com需要重定向所有流量到https
同任何流量http://example.com/about到
我认为这将是这样的:
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
这适用于我:
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
如果流量通过非SSL HTTP进入,则重定向到用户最初尝试访问的任何页面的HTTP等效项。它也不涉及任何mod_rewrite选项,所以它很容易阅读。为什么大家都觉得需要明确设置重定向的HTTP代码,并将其中一个重写标记为“最后一个”?说真的,在过去的几天里我看到了几十个相同的htaccess规则。
我认为如果重写是“纠正”动作,301响应可能比默认的302响应更合适,并且需要明确的声明。就'L'而言,如果不再有任何进一步的规则匹配,就没有必要了,但是如果这样做的话,通过擦除新的方案/主机信息可以很容易地阻止重定向。考虑到大多数人“忘记”一半时间发布其他规则集,这是更安全的选择。如果没有更多的规则,我同意这只是混乱,我真的不明白,当他们在文件中唯一的规则使用它... – 2010-07-13 19:23:18
虽然这似乎工作,这是错误的:这因为这依赖于客户端发送的“主机”头。此外,主机头还可以包含端口:因此,如果客户端请求中的主机头包含端口:80,则该位置将具有端口:80,其中包含https,这是错误的。请参阅http://serverfault.com/questions/814153/apache-returning-wrong-location-header。从t-richards http://stackoverflow.com/a/27930928/1504300的答案似乎更好 – reallynice 2016-11-10 09:12:35
@reallynice你可以硬编码主机头,以及?对于只有一个的服务器。通常你可能没有访问服务器主配置文件,但你有.htaccess权限,所以在这种情况下,我只是使用它,但硬编码主机。 – eis 2017-01-15 15:24:39
根据Apache documentation,对于此任务,使用mod_alias
比mod_rewrite
更合适。也就是说,以重定向所有的HTTP流量HTTPS,一会:
<VirtualHost *:80>
ServerName www.example.com
Redirect permanent/https://www.example.com/
</VirtualHost >
<VirtualHost *:443>
ServerName www.example.com
# ... SSL configuration goes here
</VirtualHost >
有两点需要注意有关此配置:
VirtualHost
指令仅在“服务器配置”上下文中有效。mod_rewrite
指令是在mod_alias
指令之前处理的。如果您的.htaccess
文件中已有大量RewriteRule
s,则最好使用mod_rewrite
配置。在我的情况下,“重定向永久”必须是:'重定向永久http://www.example.com https:// www.example.com',否则在浏览器中我得到一个循环错误 – 2017-05-12 10:11:22
这是一个previous answer using .httaccess但增加在评论中提议的变更,以及一些从我:
RewriteEngine on
RewriteBase/
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://my.domain.name%{REQUEST_URI} [L,R=301]
注:
%{HTTPS}
在使用http时未设置为off
,但为空,因此!on
比off
更可靠。%{SERVER_NAME}
。如果你考虑使用它,请检查this discussion的警告 - 它依赖于其他配置是正确的。R=301
表示它是永久重定向,因为它通常意味着在这种情况下。如果您认为这是暂时的,那么可以省略或指定为R=302
。L
表示它是应用于此请求的最后一条规则。如果您怀疑或知道在此之后还有其他规则您不想申请,请留下它。如果这是文件的唯一规则,您可以删除它。
如果您不想使用您的实际域名,请针对所有域名问题使用example.com。 – animuson 2010-07-13 17:31:09
可能重复的[如何将所有HTTP请求重定向到HTTPS](http://stackoverflow.com/questions/4083221/how-to-redirect-all-http-requests-to-https) – Sadurnias 2016-02-11 06:12:55