You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.htaccess配置HTTP转HTTPS重定向失效,触发ERR_TOO_MANY_REDIRECTS

解决HTTPS重定向循环(ERR_TOO_MANY_REDIRECTS)问题

看起来你遇到了典型的HTTPS重定向循环问题,结合你的.htaccess配置,我来帮你排查并解决:

问题根源分析

  1. 重复开启RewriteEngine:你的配置里多次写入RewriteEngine On,虽然Apache会忽略重复的开启指令,但这会让配置逻辑混乱,也可能引发规则执行顺序的潜在问题。
  2. HTTPS检测条件不准确:如果你的网站使用了CDN或反向代理服务器,直接用%{HTTPS} off判断协议会失效——CDN会先处理用户的HTTPS请求,再以HTTP方式转发到你的源服务器,此时%{HTTPS}变量永远是off,导致服务器不断将HTTPS请求重定向到HTTPS,最终触发重定向循环。

修复后的完整.htaccess配置

我已经整理并修正了所有规则,把重定向逻辑放在最优先位置,同时兼容直接访问和CDN/反向代理场景:

RewriteEngine On

# HTTP转HTTPS重定向,兼容源服务器直接访问与CDN/反向代理场景
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# 自定义404错误页面
ErrorDocument 404 /error404.php

# PHP错误显示(注意:生产环境建议关闭,改为记录到日志文件)
php_flag display_errors 1

# 友好URL重写规则
RewriteRule ^/?movie/([0-9A-Za-z\-:]+)/?$ /movie.php?id=$1 [NC,L]
RewriteRule ^/?cast/([0-9A-Za-z\-:]+)/?$ /cast.php?cast=$1 [NC,L]
RewriteRule ^/?keyword/([0-9A-Za-z\-:]+)/?$ /keyword.php?keyword=$1 [NC,L]

关键修改说明

  • 合并RewriteEngine指令:仅在配置开头写一次RewriteEngine On,确保所有重写规则在同一引擎实例下执行。
  • 优化HTTPS检测逻辑:新增%{HTTP:X-Forwarded-Proto} !https条件,这个HTTP头是CDN/反向代理用来告知源服务器用户实际请求协议的,无论网站是直接对外还是通过CDN,都能正确识别请求协议。
  • 调整规则顺序:将HTTPS重定向规则放在最前面,确保用户请求进来后先完成协议转换,再处理友好URL重写。
  • 规范正则写法:将规则中的-转义为\-,避免在正则表达式中被误判为范围符号(当前场景虽不影响,但规范写法更安全)。

验证步骤

  1. 将修改后的.htaccess保存到网站根目录。
  2. 清除浏览器缓存:由于之前的301永久重定向已被浏览器缓存,需清除缓存或使用无痕模式测试。
  3. 分别用HTTP和HTTPS访问网站,确认:
    • HTTP请求会自动跳转到HTTPS
    • HTTPS请求无重定向循环提示

内容的提问来源于stack exchange,提问作者sdad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:38:48