识别永久重定向配置冲突,核心是沿着一次请求的完整链路逐层核对:先看请求进入时命中的规则,再看服务器返回的状态码和 Location,最后看目标地址是否又被另一条规则改写。只要同一跳出现两个以上来源(服务器配置、CDN、应用路由、HTML 里的跳转指令)同时生效,就可能互相覆盖或形成循环,表现为状态码与预期不符、跳转链过长、最终落地页错误。
要查的是请求从原始 URL 到最终 URL 之间经过了几次跳转、每次返回什么状态码。可以用命令行工具跟踪,例如 curl -I -L --max-redirs 10 https://example.com/old-path,逐条查看 HTTP/1.1 301 或 302 以及对应的 Location。也可以使用浏览器开发者工具的 Network 面板,勾选保留日志后访问旧地址。
结果说明:如果第一次跳转是 301,第二次又跳到第三个地址,说明存在多级重定向;如果同一 URL 反复出现或超过设定上限,说明形成了循环。此时先记下每一跳的状态码和来源,再进入下一项核对,不要急着改配置。
永久重定向可能由多个层面产生,冲突往往来自它们同时被启用。按顺序检查:
rewrite、return 301,Apache 的 Redirect、RewriteRule,确认是否有同一路径被多条规则匹配。<meta http-equiv="refresh"> 和 JavaScript 跳转,它们不是 301,但会让最终落地页与服务器返回不一致。判断结果:如果同一条旧路径在两层以上都有规则,且目标地址不同,就是配置冲突;如果只有一层有规则,但跳转链仍然异常,问题可能在目标地址本身又命中了另一条规则。
把可疑规则逐条隔离验证,而不是一次改多处。常用做法是:
结果说明:只有在停用某一层后跳转行为发生确定变化,才能把该层列为已定位原因;仅凭“看起来像”只能算可能原因。若停用后仍异常,继续检查下一层。
要查的是跳转目标是否又被另一条规则捕获。例如规则 A 把 /old 跳到 /new,规则 B 又把 /new 跳到 /old,两者同时存在就会循环。还要确认规则匹配顺序:多数服务器按配置出现顺序或最长匹配生效,若宽泛规则排在精确规则之前,精确规则可能永远不触发。
结果说明:如果目标地址本身命中规则,应合并或删除重复规则,只保留一条权威跳转;如果顺序导致覆盖,调整顺序后重新用同一命令验证跳转链是否缩短为一跳。
永久重定向应返回 301 或 308,临时跳转用 302 或 307。要查的是实际返回码是否与意图一致,以及是否误用了 meta refresh 或 JavaScript 代替服务器跳转。注意 robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录;HTTPS 本身不保证安全无漏洞或排名。不同搜索引擎对跳转的处理需分别核查,不能只凭一次抓取工具的结果下结论。
下一步:把上述检查得到的每一跳状态码、Location 和对应配置位置整理成一张链路记录,先删除或合并重复规则,再用同一条命令复测,直到跳转链只剩一跳且状态码符合预期。