← 中文资源

简体中文版本

HTTP 抓取 URL 时报重定向次数过多

通过追踪 Location 链并找出制造循环的不匹配规则,诊断重定向循环。

阅读英文原文

症状

抓取 URL 以重定向次数过多失败,跟随链会看到同一 URL 反复出现。循环通常由相互冲突的规则造成:HTTP 到 HTTPS 的重定向又被代理发回 HTTP、尾斜杠规则与另一规则相争,或认证中间件把请求重定向到一个同样需要认证的页面,于是每一跳都回到受保护 URL。

诊断

用 curl -IL 追踪 Location 链;检查 nginx rewrite/return 规则;检查认证跳转逻辑。

curl -sIL http://host/path | grep -i "^location\|^HTTP"

根因

重定向链回到了已访问过的 URL,因为规则把请求改回了源头,或认证守卫跳到了另一个受保护页面。

修复

修正规则使每一跳向前推进;纠正代理配置中的 scheme 与 host;把登录或错误路径从认证跳转中豁免,使其能终止而非自循环。

验证

再次请求确认链以 200 终止,并确认最终 URL 是预期目标。链终止且目标正确即证明循环已打破。

常见陷阱

仅抬高客户端的最大重定向次数会把循环延后而非修复;应从规则入手。