HTTP转HTTPS时URL出现双www重定向错误求助
问题分析与修复方案
出错原因
你当前的规则仅对非www开头的域名生效,当访问http://www.example.com时,这条规则不会触发,无法将其跳转到HTTPS。如果之后你额外添加了强制HTTPS的规则,但错误地在%{HTTP_HOST}前重复添加了www.,就会出现https://www.www.example.com的双www问题。另外,规则里的RewriteCond %{HTTP_HOST} !=""是多余的,合法请求中HTTP_HOST永远不会为空。
修复方案
方案1:分两步处理(逻辑清晰)
先强制所有HTTP请求转HTTPS,再将非www域名跳转至带www的HTTPS地址:
# 强制HTTP跳转至HTTPS RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # 强制非www域名跳转至带www的HTTPS域名 RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
方案2:合并规则(减少一次跳转)
用一条规则同时处理HTTPS和www的强制跳转,从根源避免双www问题:
RewriteCond %{HTTP_HOST} !^www\. [NC,OR] RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^(www\.)?(.+)$ [NC] RewriteRule ^ https://www.%2%{REQUEST_URI} [R=301,L]
这条规则的逻辑是:只要域名不是www开头,或者请求不是HTTPS,就跳转到https://www.加上去掉www后的主域名(%2),确保只添加一次www。
测试提示
测试阶段建议将R=301改为R=302临时跳转,避免浏览器缓存错误的跳转规则;修改.htaccess后记得清空浏览器缓存再验证。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

