阅读约 12 分钟
如何检测 URL 重定向(网址跳转)并读懂重定向链
用 TrueURL、curl 和浏览器开发者工具(DevTools)逐步检测 URL 重定向,读懂重定向链的每一跳,并修复重定向循环、过长的重定向链以及 301 与 302 混用等问题。
阅读全文免费重定向工具
浏览器提示“重定向次数过多”,说明网站在让它兜圈子。TrueURL 会一直跟踪重定向,直到循环闭合,并显示其中涉及的每一个 URL。
按 Enter 开始检测
Cloudflare 边缘网络始终会验证证书,因此该选项无法跳过证书验证。证书问题会在检测结果中报告。
随第一个请求发送,最大 16 KB。除非设置了 Content-Type 请求头,否则 JSON 请求体以 application/json 发送,其他内容以表单形式发送。
可设为 1~50。浏览器会在 20 跳后停止。
网站可能会把手机、搜索引擎爬虫和链接预览爬虫重定向到不同的地址。
随重定向链中的每个请求一起发送。
未添加自定义请求头。
填写值后才会发送此请求头。请求头的值不会保存。
跟踪 HTML 页面中的 <meta http-equiv="refresh"> 标签和 Refresh 响应头。
跟踪页面脚本中简单、无条件的重定向,例如 location.href = "…"。
设置会保存在此浏览器中,但 Cookie、请求头的值和 POST 请求体始终不会保存。
当 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 会记录它请求的每一个 URL,以及当时的请求方法和所持有的 Cookie。如果某一跳在相同状态下回到了已经请求过的 URL,这条重定向链就永远不可能结束,检测结果会突出显示循环闭合的那一跳。
由于 TrueURL 会像浏览器一样保存 Cookie,它能区分真正的循环和正常的 Cookie 握手:后者是指网站设置一个 Cookie 后,把访问者重定向回同一个 URL 一次。如果每次经过时状态都有变化,重定向链会一直继续,直到达到高级设置中的最大跳数上限(最多 50)。达到上限的重定向链通常也是无限循环,例如每一跳都添加一个新的查询参数。
www,而另一条规则(通常位于 CMS 或主机控制面板中)又把它去掉。Server、Via、CF-Ray 或 X-Powered-By,判断是哪一层发出的重定向:CDN、Web 服务器还是应用程序。阅读约 12 分钟
用 TrueURL、curl 和浏览器开发者工具(DevTools)逐步检测 URL 重定向,读懂重定向链的每一跳,并修复重定向循环、过长的重定向链以及 301 与 302 混用等问题。
阅读全文这是 Chrome 在重定向链经过 20 次重定向仍未结束时显示的错误(中文版提示“example.com 将您重定向的次数过多。”),几乎总是由循环引起的:网站的重定向规则相互矛盾。在上方检测该 URL,即可看到哪些 URL 在重复。
会。依赖 Cookie、语言、位置或设备的循环,只会影响处于相应情况的访问者。可以通过高级设置复现:添加该 Cookie、Accept-Language 请求头或移动端 User-Agent,然后重新检测。依赖访问者地理位置的循环无法复现,因为请求始终来自 Cloudflare 的网络。
这说明它是基于 Cookie 的循环:过期或相互冲突的 Cookie 让网站把您的请求来回重定向。清除 Cookie 会重置您的状态,但对于每一个拿到相同 Cookie 的访问者来说,问题依然存在。可以使用高级设置中的 Cookie 字段在这里复现它。
您的浏览器可能已经登录、存有同意 Cookie,或者有 HSTS 记录或缓存的重定向,从而跳过了其中一跳。TrueURL 从没有 Cookie、没有历史记录的状态开始,就像首次访问的用户或爬虫一样。如果它发现了循环,新访问者和爬虫很可能也会遇到,除非网站对来自数据中心的请求区别对待。
循环是指 TrueURL 在相同状态下回到了一个已经请求过的 URL,因此重定向链永远不可能结束。达到最大跳数则是指它在经过设定次数的重定向后停了下来,但没有出现完全相同的重复。这样的重定向链也许最终会结束,但无论如何,这么长的链本身就是问题。可以把最大跳数调高到 50,继续往后看。
会,这是最常见的原因之一。如果 CDN 通过 HTTP 与您的服务器通信,而服务器强制使用 HTTPS;或者 CDN 和服务器在带 www 和不带 www 之间朝相反方向重定向,它们就会把每个请求来回推送。每一跳的响应头会显示是哪一层做出的响应。