识别404状态码的配置冲突,核心方法是让同一URL在不同配置层各跑一次,比较它们返回的状态码。如果服务器、应用、CDN或重写规则给出的结果不一致,冲突就存在。判断依据不是某一层写没写规则,而是最终响应头里的状态码由谁决定。
不要只看浏览器页面。用curl -I请求目标URL,记录状态码、Location和Server等响应头。再对同一URL加一个不存在的参数或换一种请求方法,观察状态码是否变化。把结果按“URL、请求方式、返回码、跳转目标”列成表,这是后续判断冲突的基础。
需要同时记录三处配置:服务器配置(如Nginx的try_files、Apache的.htaccess)、应用路由(框架的404处理)、以及CDN或反向代理的规则。缺少任何一层,比较都不完整。
冲突往往表现为:应用想返回404,服务器却把它重写成200;或者CDN缓存了一个旧的200,掩盖了源站的404。可按以下顺序排查。
注意区分“可能原因”和“已经定位的原因”。状态码异常可能来自缓存、重写顺序或应用异常捕获,只有逐层停用后结果发生变化,才能确认是那一层造成的。
Disallow只限制抓取,不等于可靠的索引移除;它和404返回码解决的是不同问题,不能互相替代。修改配置后,用与排查时完全相同的URL、请求方式和工具再测一遍,对比响应头是否一致。如果之前是CDN缓存导致的冲突,还要确认缓存已刷新,否则测到的仍是旧结果。复查通过的标准是:同一URL在源站、经过CDN、以及不同请求方式下,返回的状态码含义一致,不再出现“页面说没有、状态码说正常”的情况。
下一步:挑一个当前返回异常的URL,按上面的表格记录三层配置的实际返回码,先确定冲突发生在哪一层,再动手改规则。