检查404notfound前后环节的依赖,核心是沿着“请求进入—路由匹配—资源查找—响应输出—日志记录”这条链路,逐段确认上一环是否把正确信息交给了下一环。不要只盯404页面本身,因为404往往是末端结果,真正的问题常出现在路由、重写规则、文件路径、上游代理或缓存层。最有效的一步是:先固定一个可复现的请求,再从最靠近用户的环节向源站逐段核对,确认每一环收到的路径、状态码和响应头是否与预期一致。
在排查前,先建立一份最小对照信息,避免边查边猜。对同一个404notfound请求,记录以下内容:
Location、Content-Type、Cache-Control、X-Cache 等。这一步的判断依据是:如果预期本身就是404,那问题不是“修404”,而是检查是否有链接、站点地图或站内搜索错误地指向了不存在的资源。如果预期是200,才进入后续依赖检查。
从前到后,每一环都要问:我收到的输入是什么,我输出的结果是什么?常见依赖顺序如下:
try_files、Apache 的 mod_rewrite。要确认规则顺序和终止条件,避免所有请求被错误地送到不存在的文件。判断结果时,若某一环的输出与下一环的输入不一致,问题就位于该环或它的上游。例如代理日志显示路径为 /a/b,应用日志却显示 /b,说明重写或前缀剥离环节有依赖断裂。
不要只测一个地址。构造几组对照请求,可以快速判断依赖方向:
如果对照请求全部404,优先检查服务器根目录、站点绑定和默认文档;如果只有特定路径404,优先检查重写规则和路由参数。验证时还要分清:robots.txt 的抓取限制不等于可靠的索引移除;站点地图不保证收录;这些与404响应本身是不同环节,不能混为一谈。
修复后,把本次的请求样本、预期状态码、关键响应头和检查命令保留下来,作为回归检查项。每次发布、改代理配置或改路由后,用同一组样本重跑。维护的重点不是记住某个404页面,而是确认整条依赖链的输入输出契约没有变化。若使用不同搜索引擎或平台,其对404、软404、重定向的支持和抓取行为需要分别核查,不能用一个平台的观察结果直接推断另一个平台。
下一步,选一个当前可复现的404notfound请求,按上面的顺序记录每一环的路径与状态码,先找出第一处输入输出不一致的位置,再针对该环节修改并复测。