URL重定向测试中看到旧地址仍返回 200、或新地址没有立即生效,先不要急着判定重定向配置失败。浏览器、中间代理、CDN 和搜索引擎缓存都可能返回旧响应,造成“重定向没生效”的假象。排除缓存的关键是:用不携带本地缓存的请求重复验证,并对比响应头中的缓存标识与重定向状态码。
看到旧 URL 没有跳转时,可能来自三个层面:
这三者的排查方式不同。浏览器缓存可以用无痕窗口或禁用缓存排除;中间层缓存要看响应头;搜索引擎缓存只能通过抓取工具和站点日志判断,不能靠刷新页面解决。
最直接的办法是绕开本地缓存发起请求。以命令行工具为例,可以执行:
curl -I -H "Cache-Control: no-cache" https://example.com/old-page
重点看三处:
Location 响应头是否指向预期的新 URL。Cache-Control、Age、X-Cache 等字段是否显示命中缓存。如果命令行返回 301 且 Location 正确,但浏览器仍显示旧页面,问题基本在本地缓存。如果命令行也返回 200,说明请求没有到达重定向规则,需要检查服务器配置或 CDN 缓存规则。
判断是否为缓存假象,可以做一个简单对比。假设旧地址应跳转到新地址:
no-cache 请求头访问。这个对比只能缩小范围,不能单独证明某一层缓存就是唯一原因。服务器规则写错、CDN 缓存未刷新、DNS 解析到旧节点,都可能产生相同现象。
如果源站配置正确,但外部访问仍看到旧内容,需要检查 CDN 或反向代理。可以查看响应头中是否出现 Age 值较大、X-Cache: HIT 等标识。不同服务商的头部字段不同,应以实际返回为准。
处理方式通常是清除对应 URL 的缓存,或调整缓存规则让重定向响应不被长期缓存。301 重定向常被浏览器和中间层长期保存,修改后旧缓存可能持续生效,这也是它容易造成假象的原因。
搜索结果里仍显示旧 URL,不等于重定向失效。搜索引擎需要重新抓取和更新索引,这个过程不受你本地清缓存控制。可以用抓取工具查看当前返回的状态码,并结合服务器日志确认搜索引擎是否已经抓到重定向。
robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。要判断搜索引擎侧的真实状态,应以抓取工具返回的响应和日志记录为准,而不是只看搜索结果页面。
遇到“重定向没生效”时,按以下顺序收集证据:
每一步只回答一个问题:响应来自哪里、状态码是什么、缓存是否命中。不要在没有区分缓存层的情况下直接改配置,否则可能把正常规则改坏。
下一步可以固定一条旧 URL,分别用命令行、无痕窗口和普通窗口各请求一次,把状态码、Location 和缓存相关响应头记录下来。三组结果不一致时,差异出现在哪一层,问题就优先从那一层查。