什么是重定向循环?
重定向循环 就像一个“死胡同”,浏览器在访问某个网页时,被服务器不断地、无休止地在两个或多个 URL 之间来回“踢皮球”,永远也到达不了最终的目标页面。

(图片来源网络,侵删)
这个过程是这样的:
- 浏览器请求访问 页面 A。
- 服务器告诉浏览器:“请访问 页面 B”,这是一个 301 或 302 重定向。
- 浏览器遵从指令,请求访问 页面 B。
- 服务器又告诉浏览器:“请访问 页面 A”,这也是一个重定向。
- 浏览器再次请求访问 页面 A……
- ……如此往复,形成了一个无限循环。
为了防止浏览器无限请求下去,浏览器通常会设置一个最大重定向次数(20 次),一旦超过这个次数,就会判定为“循环”,并显示这个错误提示,以保护浏览器性能和用户体验。
为什么会发生重定向循环?(常见原因)
重定向循环的根本原因在于 重定向规则设置不当,导致逻辑上形成了闭环,以下是一些最常见的原因,尤其是在使用 DedeCMS (织梦CMS) 时:
.htaccess 文件配置错误(最常见)
.htaccess 是 Apache 服务器上的一个配置文件,常用于设置 URL 重写(伪静态)和重定向规则,错误的规则是导致循环的“重灾区”。

(图片来源网络,侵删)
- 错误的伪静态规则:如果你修改了
DedeCMS的伪静态规则,但规则中又错误地将所有请求(包括对 CSS、JS 图片等静态文件的请求)都重定向回首页或某个动态页面,就会形成循环。 - 错误的域名或 HTTPS 重定向:
- 你想把
http://example.com重定向到https://example.com。 - 但你的
.htaccess规则写错了,导致访问https://example.com时又被重定向回http://example.com。 - 典型错误示例:
# 错误的写法,会导致 HTTP 和 HTTPS 之间循环 RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
- 你想把
- 错误的目录重定向:当你移动了网站目录(例如把网站根目录从
/public_html移动到/public_html/cms),但重定向规则没有写对,也可能导致循环。
CMS 系统内部配置错误(针对 DedeCMS)
DedeCMS 本身也有许多设置可以触发重定向。
- 网站设置中的“站点根网址”错误:
- 在后台“系统” -> “系统基本参数” -> “核心设置”中,“站点根网址”填写错误,你把
https://www.example.com写成了http://www.example.com,而网站又开启了强制 HTTPS,就会导致循环。
- 在后台“系统” -> “系统基本参数” -> “核心设置”中,“站点根网址”填写错误,你把
- “后台目录重定向”设置错误:
在后台“系统” -> “系统基本参数” -> “选项设置”中,如果设置了“后台目录重定向”,但填写的路径不正确,可能导致访问后台时循环。
- 会员中心相关设置错误:
在“会员” -> “会员设置”中,会员中心的网址、登录跳转页等如果配置错误,也可能在用户登录或访问会员中心时触发循环。
- 缓存问题:
DedeCMS有强大的缓存机制,如果你修改了配置,但没有清空缓存,那么网站仍然会使用旧的、错误的配置文件,导致问题依旧。
服务器或主机面板设置
- PHP-FPM 或 FastCGI 缓存:一些服务器为了性能会开启缓存,如果缓存配置有误,可能会缓存重定向响应,导致循环。
- 负载均衡器或 CDN 配置:如果你的网站使用了负载均衡器或 CDN 服务,它们上面的重定向规则如果和服务器上的规则冲突,也会导致循环。
如何排查和解决?(一步步指南)
遇到这个问题,不要慌,按照以下步骤冷静排查:

(图片来源网络,侵删)
第 1 步:确认问题范围
- 是否所有页面都循环? 如果是,很可能是
.htaccess或网站根目录配置错误。 - 是否只有特定页面(如首页、后台、会员中心)循环? 如果是,重点排查该页面相关的具体设置。
第 2 步:检查 .htaccess 文件(首要排查对象)
这是最可能的原因,通过 FTP 或文件管理器进入网站根目录,找到 .htaccess 文件。
- 备份:务必备份这个文件!
- 临时禁用:将
.htaccess文件重命名为.htaccess.bak或其他名字,然后刷新页面,如果循环消失了,100% 是这个文件的问题。 - 分析规则:如果问题出在
.htaccess,请仔细检查里面的规则。- 检查伪静态规则:确保
DedeCMS的伪静态规则是正确的,并且不会干扰静态文件,你可以参考DedeCMS官方或你所用主题的.htaccess示例。 - 检查域名/HTTPS 规则:确保你的重定向规则是单向的,从 HTTP 到 HTTPS 的规则应该是这样的:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]这个规则的意思是:“如果不是 HTTPS,就永久重定向到 HTTPS 的同一路径”,它不会反过来再重定向。
- 检查目录规则:确保目录重定向的
RewriteBase和目标路径是正确的。
- 检查伪静态规则:确保
第 3 步:检查 DedeCMS 后台设置
.htaccess 没问题,或者你修复了它但问题依旧,那么就要检查 CMS 内部设置了。
- 清空所有缓存:
- 登录 DedeCMS 后台。
- 进入“系统” -> “系统设置” -> “一键更新网站缓存”,点击“更新所有缓存”。
- 如果你有安装缓存插件,也一并清空。
- 检查核心参数:
- “系统” -> “系统基本参数” -> “核心设置”。
- 核对“站点根网址”:确保它和你当前访问的域名、协议(HTTP/HTTPS)完全一致。
- 检查选项设置:
- “系统” -> “系统基本参数” -> “选项设置”。
- 检查“后台目录重定向”等设置是否正确。
- 检查会员设置:
- “会员” -> “会员设置”。
- 检查“会员中心主页”、“会员登录跳转页面”等 URL 是否正确。
第 4 步:检查浏览器和插件
- 无痕/隐私模式:在无痕模式下访问网站,排除浏览器缓存或插件(如广告拦截器、VPN 扩展)的干扰。
- 禁用插件:如果你安装了任何插件,尝试暂时禁用它们,看看问题是否解决,某些插件可能会错误地添加重定向规则。
第 5 步:检查服务器/主机环境
如果以上所有方法都无效,问题可能出在服务器层面。
- 联系主机商:向你的主机提供商技术支持报告问题,并说明你已经尝试过的排查步骤,他们可以检查服务器配置、PHP-FPM 缓存、CDN 设置等。
- 检查 CDN:如果你使用了 Cloudflare、阿里云 CDN 等,登录其控制台,检查“规则”或“缓存”设置,看是否有错误的重定向规则。
排查清单
| 检查区域 | 具体操作 |
|---|---|
| 初步判断 | 确定是所有页面循环还是特定页面循环。 |
.htaccess 文件 |
【最关键】 备份并临时重命名该文件,测试问题是否消失,如果消失,仔细分析其规则。 |
| DedeCMS 后台 | 【第二关键】 彻底清空所有缓存,然后核对“站点根网址”等核心参数和选项设置。 |
| 浏览器环境 | 使用无痕模式访问,并尝试禁用浏览器插件。 |
| 服务器环境 | 如果以上都无效,联系主机商或检查 CDN/负载均衡配置。 |
对于 DedeCMS 90% 的重定向循环问题都源于 .htaccess 文件配置错误或后台“站点根网址”与实际访问地址不匹配,请务必从这两点开始重点排查。
