我想将转到http://example.com的所有流量重定向到https://example.com
http://example.com/about与https://example.com/about
相同我认为会是这样的:
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
答案 0 :(得分:65)
这对我有用:
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
如果流量通过非SSL HTTP进入,则重定向到用户最初尝试访问的任何页面的HTTP等价物。它也不涉及任何mod_rewrite选项,因此很容易阅读。
旁边咆哮:为什么每个人都觉得需要明确设置重定向的HTTP代码并将其中一个重写标记为“最后一个”?说真的,我在最近几天看到了几十个看起来相同的htaccess规则。
答案 1 :(得分:12)
这是一个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}
。如果您考虑使用它,请查看Apache Wiki中的警告 - 它依赖于其他配置是否正确。R=301
表示它是永久重定向,因为它通常意味着在这种情况下。如果你认为它是暂时的,可以省略或指定为R=302
。L
表示应用此请求的最后一条规则。如果您怀疑或知道此后还有其他规则您不想申请,请保留。如果这是文件的唯一规则,则可以删除。答案 2 :(得分:7)
根据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
指令仅在“server config”上下文中有效。mod_rewrite
指令在mod_alias
指令之前处理。如果您的RewriteRule
文件中已经有大量的.htaccess
s,那么使用mod_rewrite
配置可能会更好。答案 3 :(得分:1)
在所有条件下均可工作:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [NE,L,R=301]
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]
<IfModule>
答案 4 :(得分:0)
经过研究后,这个版本对我有用,版本有所不同。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]