404 看起来最好解决:找不到就找回来,或者让它 301 过去。

但线上真实的 404,往往不是「文件删了」这么简单。

三种 404,病因完全不同

资源真的没了。 改版删了页面、图片被清理、附件过期。这种该 301 到新地址,或者 410 明确告诉搜索引擎永久移除。

伪静态没配好。 动态程序靠 rewrite 把 /article/123 转成 index.php?id=123。规则缺了、顺序错了,请求就被当成目录去找,找不到就 404。

大小写和尾斜杠。 Linux 文件系统区分大小写,Logo.png 和 logo.png 是两个文件。Windows 上开发一切正常,传上去就 404,这类问题一年能遇到好几次。

怎么快速分

先直连源站 IP 测一次,绕过 CDN。源站也 404,问题在服务器;源站正常、只有走 CDN 404,去看缓存和回源配置。

再看范围:静态资源(css、js、图片)也 404,多半是路径或权限;只有页面 404,静态资源正常,那就是 rewrite。

Nginx 上最常见的一行

try_files $uri $uri/ /index.php?$query_string;

少了它,或者 location 块里没写,动态路由全部 404。查配置的时候先看这一行在不在正确的位置。

比 404 更糟的是软 404

页面显示「内容不存在」,HTTP 状态码却是 200。搜索引擎会把这个空页面当成正常内容收录,站点里越积越多,权重被稀释。

该 404 就返回 404,别用 200 加一句提示糊过去。这一点很多 CMS 默认就是错的。

只有某地 404 的时候

多机部署,内容没同步,或者某台机器上的伪静态配置是旧的,都会出现「本地能开、外地 404」。

用全节点测一次,看是集中在某个地区还是随机分布。集中在某地,查那一台的配置和文件同步。

具体每个节点返回什么状态码,在 网站测速 的结果里按节点列出来,比挨个问用户快。