.htaccess配置HTTPS重定向出现Too many redirects问题求助
解决.htaccess重定向导致“Too many redirects”的问题
我来帮你分析问题根源,再给出针对性的解决方案。
你的原始代码只处理了HTTP(80端口)请求转HTTPS+www的场景,但漏掉了两个关键情况:
- 用户直接访问
https://example.com(HTTPS非www域名)时,没有规则触发重定向,这部分请求无法转到目标域名; - 如果你的网站用了CDN、反向代理这类服务,服务器收到的请求实际是HTTP(端口80),但用户访问的是HTTPS——这时候
%{SERVER_PORT}的判断会失效,导致循环重定向:服务器一直把HTTPS请求当成HTTP来处理,反复重定向后浏览器就会报错“Too many redirects”。
正确的.htaccess配置方案
根据你的部署场景,我分两种情况给出配置:
情况1:普通服务器(未使用CDN/反向代理)
直接用%{HTTPS}判断协议,同时覆盖非www的重定向需求:
RewriteEngine On # 匹配所有非www OR 非HTTPS的请求,统一重定向到https://www.example.com RewriteCond %{HTTP_HOST} !^www\. [NC,OR] RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
情况2:使用CDN/反向代理(比如Cloudflare、Nginx反向代理)
这时候服务器无法直接通过%{HTTPS}判断用户的真实访问协议,需要检查CDN/代理传递的X-Forwarded-Proto请求头:
RewriteEngine On # 先处理HTTP转HTTPS(适配反向代理场景) RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] # 再处理非www转www RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
几个重要注意事项
- 先测试再永久重定向:可以先把
R=301改成R=302(临时重定向),确认所有访问场景都正常后,再改回R=301(永久重定向会被浏览器和搜索引擎缓存); - SSL证书覆盖:确保你的SSL证书同时包含
www.example.com和example.com(比如通配符证书或多域名证书),否则重定向到HTTPS时会出现证书错误; - 规避缓存干扰:测试时建议用浏览器隐私模式,避免旧的重定向缓存影响结果。
内容的提问来源于stack exchange,提问作者user411103
相关产品推荐
相关产品推荐

