TrueURL
TrueURL

菜单

免费重定向工具

重定向循环检测

浏览器提示“重定向次数过多”,说明网站在让它兜圈子。TrueURL 会一直跟踪重定向,直到循环闭合,并显示其中涉及的每一个 URL。

什么是重定向循环?

当 URL A 重定向到 URL B,而 B 又直接或经过其他跳重定向回 A 时,就形成了重定向循环。浏览器跟随大约 20 次重定向后就会放弃并报错:Chrome 和 Edge 显示 ERR_TOO_MANY_REDIRECTS(中文版 Chrome 提示“example.com 将您重定向的次数过多。”),Firefox 显示 The page isn't redirecting properly,Safari 则显示 Too many redirects occurred。搜索引擎无法将陷入循环的页面编入索引。

TrueURL 如何检测循环

TrueURL 会记录它请求的每一个 URL,以及当时的请求方法和所持有的 Cookie。如果某一跳在相同状态下回到了已经请求过的 URL,这条重定向链就永远不可能结束,检测结果会突出显示循环闭合的那一跳。

由于 TrueURL 会像浏览器一样保存 Cookie,它能区分真正的循环和正常的 Cookie 握手:后者是指网站设置一个 Cookie 后,把访问者重定向回同一个 URL 一次。如果每次经过时状态都有变化,重定向链会一直继续,直到达到高级设置中的最大跳数上限(最多 50)。达到上限的重定向链通常也是无限循环,例如每一跳都添加一个新的查询参数。

重定向循环的常见原因

  • 代理或 CDN 背后的 HTTP 与 HTTPS:CDN 通过 HTTP 连接您的服务器(例如 Cloudflare 的 Flexible SSL 模式),而服务器又把每个 HTTP 请求重定向到 HTTPS。于是浏览器再次请求 HTTPS,CDN 再次通过 HTTP 回源,如此反复。请使用 Full (strict) 模式,或者只让其中一层处理 HTTPS 重定向。
  • 相互冲突的 www 规则:一条规则添加 www,而另一条规则(通常位于 CMS 或主机控制面板中)又把它去掉。
  • 相互冲突的末尾斜杠规则:服务器添加斜杠,而应用程序又把它去掉。
  • CMS 地址设置:以 WordPress 为例,WordPress 地址或站点地址与网站实际使用的域名或协议不一致。
  • 登录、同意和地区重定向:页面把没有特定 Cookie 的访问者重定向到登录页、Cookie 同意页或国家/地区选择页,这些页面又把访问者重定向回来,但 Cookie 始终没有被设置或没有被接受。

如何修复重定向循环

  1. 在这里检测该 URL,记下哪些 URL 在重复出现,以及是哪一跳把请求送了回去。
  2. 查看该跳的响应头,例如 Server、Via、CF-Ray 或 X-Powered-By,判断是哪一层发出的重定向:CDN、Web 服务器还是应用程序。
  3. 修正或停用那一条规则,然后重新检测。每次只修改一层。
  4. 在浏览器中测试之前,先清除该网站的缓存和 Cookie。缓存的 301 和过期的 Cookie 可能会让循环在修复之后依然存在。

相关指南

常见问题

ERR_TOO_MANY_REDIRECTS(重定向次数过多)是什么意思?

这是 Chrome 在重定向链经过 20 次重定向仍未结束时显示的错误(中文版提示“example.com 将您重定向的次数过多。”),几乎总是由循环引起的:网站的重定向规则相互矛盾。在上方检测该 URL,即可看到哪些 URL 在重复。

重定向循环会只影响部分访问者吗?

会。依赖 Cookie、语言、位置或设备的循环,只会影响处于相应情况的访问者。可以通过高级设置复现:添加该 Cookie、Accept-Language 请求头或移动端 User-Agent,然后重新检测。依赖访问者地理位置的循环无法复现,因为请求始终来自 Cloudflare 的网络。

为什么清除 Cookie 后,浏览器中的循环就消失了?

这说明它是基于 Cookie 的循环:过期或相互冲突的 Cookie 让网站把您的请求来回重定向。清除 Cookie 会重置您的状态,但对于每一个拿到相同 Cookie 的访问者来说,问题依然存在。可以使用高级设置中的 Cookie 字段在这里复现它。

为什么页面在我的浏览器中正常,TrueURL 却检测到循环?

您的浏览器可能已经登录、存有同意 Cookie,或者有 HSTS 记录或缓存的重定向,从而跳过了其中一跳。TrueURL 从没有 Cookie、没有历史记录的状态开始,就像首次访问的用户或爬虫一样。如果它发现了循环,新访问者和爬虫很可能也会遇到,除非网站对来自数据中心的请求区别对待。

循环和达到最大跳数有什么区别?

循环是指 TrueURL 在相同状态下回到了一个已经请求过的 URL,因此重定向链永远不可能结束。达到最大跳数则是指它在经过设定次数的重定向后停了下来,但没有出现完全相同的重复。这样的重定向链也许最终会结束,但无论如何,这么长的链本身就是问题。可以把最大跳数调高到 50,继续往后看。

CDN 会导致重定向循环吗?

会,这是最常见的原因之一。如果 CDN 通过 HTTP 与您的服务器通信,而服务器强制使用 HTTPS;或者 CDN 和服务器在带 www 和不带 www 之间朝相反方向重定向,它们就会把每个请求来回推送。每一跳的响应头会显示是哪一层做出的响应。