判断永久重定向问题属于哪一层,核心是看“请求发出后,究竟在哪一步偏离预期”。先用浏览器开发者工具或 curl -I 观察响应状态码、Location 头和跳转次数,再对照 DNS、服务器、应用、缓存、页面链接五个层逐一排除。能稳定复现的响应差异,就是分层定位的起点。
永久重定向通常返回 301 或 308。看到 301 不代表配置正确,只说明某一层已经发出了永久跳转指令。需要记录四项证据:请求的完整 URL、响应状态码、Location 目标地址、跳转链中每一跳的顺序。用下面命令可以一次拿到响应头:
curl -I -L --max-redirs 5 https://example.com/old-page
-I 只看头,-L 跟随跳转,--max-redirs 限制层数。如果输出里出现两次以上 301,说明存在跳转链,问题可能不在单条规则,而在多层规则叠加。
判断顺序建议从响应头开始,而不是从后台配置开始。配置界面显示的内容,不一定等于线上实际返回的内容。
拿同域名下三条 URL 做对照:一条已知正常、一条疑似异常、一条全新不存在。分别请求并记录状态码。如果全新 URL 也返回 301,说明规则范围过宽,可能命中了整站或目录级重定向;如果只有疑似异常 URL 跳转,问题更可能在单条规则、应用路由或缓存。
再换网络环境复测:用手机热点、无痕窗口、不同 DNS 各请求一次。若只有某个网络跳旧地址,优先怀疑本地 DNS 缓存或 CDN 节点缓存;若所有环境一致,回到服务器和应用层查规则。
定位到具体层后,只改该层并保留变更记录。服务器层改规则后,用 curl -I 复查状态码和目标地址;应用层改路由后,清一次应用缓存再测;缓存层问题需要按缓存策略刷新,不能只清浏览器。复查时重点看三件事:状态码是否仍为 301 或 308、Location 是否指向最终目标、跳转链是否缩短到一跳。
如果目标是让旧地址永久指向新地址,最终应稳定返回一次 301,且目标地址直接返回 200。若仍出现 302、307 或多次跳转,说明还有一层未处理干净。
下一步:选一条实际异常的旧 URL,用 curl -I -L 记录完整跳转链,再按 DNS、服务器、应用、缓存、链接五层逐项对照,把不属于该层的解释划掉。