入口页面能打开、深层链接却返回404,通常不是404页面本身出了问题,而是链路中某一段的路径、重写或资源映射断了。要定位断点,先把“入口正常”和“深层失效”当作两个独立事实,再沿请求路径逐段验证,而不是急着改404模板。
入口页面正常,可能因为它是静态文件直接命中,而深层链接依赖重写规则、参数解析或后端路由。两种常见解释是:
两种解释都成立,但代价不同:若是解释A,改404页面没用,要查重写与应用路由;若是解释B,改源站配置可能仍被缓存掩盖,需要先确认回源行为。
不要只看浏览器结果。分别取入口URL和一个已知应存在的深层URL,做同样的请求,比较以下证据:
Server、X-Cache、Via 等头。若深层缺少缓存命中标记,说明它走的是回源路径。这些证据能把“404页面设计”问题从表现层拉回到链路层:404页面只是结果,不是原因。
假设某站点入口 / 返回200,深层 /docs/guide/ 返回404。运维先改了404页面,把它做成带搜索框的友好页,但深层链接仍然打不开。原因是重写规则只匹配了无斜杠形式,带斜杠的深层路径没有进入应用路由。
动作与结果:把重写规则改为同时匹配带斜杠和不带斜杠后,深层路径返回200。这个结果说明断点在重写层,下一步应检查其他深层路径是否也有同样的斜杠变体,而不是继续调整404页面内容。若改完后仍返回404,则断点更可能在应用路由或资源映射,需要继续看应用日志。
两种做法都合理,但适用条件不同:
判断依据是:深层URL是否仍应存在。若应存在,修重写;若已废弃,修404页面并考虑用301指向新位置。不要用改404模板来掩盖本应返回200的路径。
修复一个深层路径后,不要只测这一条。取同目录下另外两到三条深层链接,重复上面的源站直连和日志检查。若它们也恢复正常,说明断点在共享的重写或路由规则;若只有原路径恢复,说明断点在单条规则或单条数据映射。
同时确认404页面本身在真正失效时仍返回404状态码,而不是返回200的软404。软404会让后续排查失去可靠信号。把修复后的深层路径加入监测清单,观察一段时间内是否再次返回404,再决定是否需要调整规则或补充重定向。