http://example.com,http://www.example.com和https://example.com到https://www.example.com
问题描述:
我们的第二个问题关于堆栈溢出!我们的目标是将我们网站的所有请求永久重定向至https://www.example.com
。我们目前有以下代码将http://example.com
和http://www.example.com
重定向到https://www.example.com
,但是,在花费了相当一段时间寻找堆栈溢出解决方案之后,我们尚未找到将https://example.com
重定向到https://www.example.com
的方法。非常感谢您的帮助。http://example.com,http://www.example.com和https://example.com到https://www.example.com
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
答
更好的在一个单一的规则来处理这个问题:
RewriteEngine On
# add www and force https in same rule
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule^https://www.%1%{REQUEST_URI} [R=302,L,NE]
- 保持这个规则作为你的第一个规则。
- 确保在测试之前清除浏览器缓存。
- 更改
302
至301
已经过测试。
+1
完美!谢谢@anubhava !!!! – haadaa
答
为了补充@ anubhava对阿帕奇优雅的解决方案,我们最近找到了一种方法做同样的Nginx的:
server {
listen 80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 80;
server_name www.example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
的[L]标志使mod_rewrite的停止处理规则集。 – user993553