http://example.com,http://www.example.com和https://example.com到https://www.example.com

问题描述:

我们的第二个问题关于堆栈溢出!我们的目标是将我们网站的所有请求永久重定向至https://www.example.com。我们目前有以下代码将http://example.comhttp://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] 
+0

的[L]标志使mod_rewrite的停止处理规则集。 – user993553

更好的在一个单一的规则来处理这个问题:

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] 
  • 保持这个规则作为你的第一个规则。
  • 确保在测试之前清除浏览器缓存。
  • 更改302301已经过测试。
+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; 
}