404 not found 的意思是:服务器收到了请求,但找不到对应的资源,于是返回 HTTP 状态码 404。判断问题属于哪一层,关键看“请求有没有到达服务器、服务器有没有对应资源、资源是否被正确映射”。如果服务器明确回了 404,问题通常在资源层或路由映射层,而不是 DNS 或网络连接层;如果浏览器连状态码都拿不到,才优先查网络与解析层。
打开浏览器开发者工具的 Network 面板,刷新页面,找到那条失败请求,观察 Status Code 和 Response Headers。若显示 404,说明请求已经到达某个服务器,并且该服务器给出了明确否定回答。此时 DNS、TCP、TLS 大概率是通的,排查重点应放在 URL 路径、服务器路由、文件是否存在、重写规则上。
若请求显示 failed、ERR_CONNECTION_REFUSED、ERR_NAME_NOT_RESOLVED 或一直 pending,则根本没有拿到 404,问题在更前面的层:域名解析、端口、防火墙、反向代理或源站不可达。把这两种现象混在一起,就会把路由问题误判成网络故障。
/test.html,访问它仍返回 404,说明服务器映射或重写规则有问题,而不是文件缺失。/this-page-should-not-exist-123。它返回 404 是正常的,说明 404 机制本身工作。若它返回 200 或首页内容,说明站点用了软 404 或兜底重写,需要另外处理。/about 与 /about/,若一个 404 一个 200,问题在 URL 规范化或目录索引配置,不在资源本身。这三项能快速把“文件真的没了”“路由没匹配上”“服务器配置把请求吞了”分开。判断结果不同,处理方式完全不同。
确认是资源层缺失,就补回文件或内容,并检查大小写:Linux 服务器上 About.html 与 about.html 是两个不同资源。确认是路由层问题,就检查应用路由表、伪静态规则、反向代理的 location 配置,看请求是否被转发到了正确的上游服务。
如果页面以前存在、现在 404,优先查是否被误删、改名、移动目录,或部署时漏传文件。若站点近期改过 URL 结构,应配置 301 跳转到新地址,而不是让旧地址直接 404。注意:robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录,这两件事与 404 的判断不是同一层问题。
修改后不要只看首页是否正常,而要重新访问最初报 404 的那个完整 URL,确认状态码变为 200 或 301。再用开发者工具确认没有重定向循环,并检查返回内容是否真是目标页面,而不是被兜底到了首页。
若状态码仍是 404,逐层回退:先确认请求到达了哪台服务器,再确认该服务器上的路由规则是否命中,最后确认命中的处理程序是否找得到资源。只有把“哪一层给出了 404”定位清楚,修复才不会反复。
下一步:打开开发者工具 Network 面板,记录那条 404 请求的完整 URL、状态码和响应头,再按上面的三个检查项逐条验证,确定问题落在资源层还是路由层后再动手修改。