随便输一个不存在的地址都会被带回首页,外链里的错误地址全都变成了有效页面,死链报告一片空白。乍看像缓存或者权限的锅,追下去往往不是。

error_page 404 /404.html;
location = /404.html {
    internal;
}

追下去是这么回事:为了所谓用户体验加了一条兜底的跳转,所有 404 都 301 回到首页,等于告诉搜索引擎这个地址永久有效,删掉的页面永远清不掉。

「404 跳首页」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

具体做法是,先把 404 到首页的那条兜底跳转整条去掉,别再兜下去;保留一个独立的错误页面,并且老老实实地返回 404;已知的旧地址单独写精确跳转,别用通配规则来代替。

验收就看一点,随便一个随机地址都返回 404 并停在错误页,不会再被带回首页。

作者 9823189