err_too_many_redirects本质是http与https间反复跳转形成死循环,关键在跳转条件未闭环:需统一用x-forwarded-proto判断协议、关闭cdn强制https、合并域名与协议跳转规则,并排除子域名自重定向。

Apache 配置 HTTPS 后出现重定向死循环(ERR_TOO_MANY_REDIRECTS),本质是请求在 HTTP 和 HTTPS 之间反复跳转,浏览器最终放弃加载。问题不在于“有没有加跳转”,而在于“跳转条件是否闭环”。关键要堵住循环入口。
检查 HTTPS 跳转规则是否自洽
最常见错误是:HTTP → 强制跳 HTTPS,但 HTTPS 请求又被某条规则再次重定向回 HTTP(或另一个 HTTPS 地址),形成 A→B→A 循环。
- 确认所有跳转规则中 %{HTTPS} !=on 或 %{SERVER_PORT} !=443 的判断逻辑是否准确 —— 这类条件在 CDN 回源、反向代理或负载均衡后可能失效,因为后端 Apache 实际收到的是 HTTP 请求(即使用户访问的是 HTTPS)
- 避免混用两种判断方式:比如一边用
%{SERVER_PORT} 80,另一边又用%{HTTPS} off,二者在代理环境下行为不一致 - 若使用 CDN(如腾讯云 EO、阿里云全站加速),务必关闭 CDN 层的“强制 HTTPS”开关,或将其设为“仅对客户端开启”,否则源站再跳一次就必然循环
验证服务器实际收到的协议头
Apache 在代理后可能收不到真实的 HTTPS 状态,需依赖 X-Forwarded-Proto 等头信息判断。
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 在虚拟主机配置中,添加可信代理设置:
RemoteIPHeader X-Forwarded-For和RemoteIPInternalProxy 127.0.0.1/32(根据实际代理 IP 调整) - 跳转条件改用:
RewriteCond %{HTTP:X-Forwarded-Proto} !https替代%{HTTPS} !=on - 同时确保前端代理(Nginx/CDN)确实转发了该头:
proxy_set_header X-Forwarded-Proto $scheme;
排查 www 与非 www、子域名间的隐性冲突
看似无关的域名跳转,常与 HTTPS 跳转叠加触发循环。
- 例如:规则先将
example.com→www.example.com(HTTP),再将所有 HTTP → HTTPS,结果变成example.com→www.example.com→https://www.example.com→ 又被另一条规则重写成https://example.com→ 再跳回 www…… - 解决方法:合并跳转逻辑,用单条规则同时处理协议 + 域名标准化,例如:
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [OR]RewriteCond %{HTTPS} !=onRewriteRule ^(.*)$ https://www.example.com%{REQUEST_URI} [R=301,L] - 子域名场景下,务必加上
RewriteCond %{HTTP_HOST} !^sub\.example\.com$排除目标域名自身,防止自我重定向
确认 .htaccess 是否被正确启用且无冗余规则
多个位置(主配置、虚拟主机、.htaccess)同时存在跳转规则,极易叠加出循环。
- 检查
AllowOverride All是否生效,且AccessFileName指向正确的文件名(默认是 .htaccess) - 临时重命名网站根目录下的 .htaccess,看问题是否消失 —— 若消失,说明问题出在该文件内
- 逐条注释 .htaccess 中的 RewriteRule,定位哪一行引发循环;特别注意是否有重复的 HTTPS 强制跳转段落
- 确保 RewriteEngine On 只出现一次,且所有规则都在同一作用域内










