Vue 项目用 history 模式,站内跳转正常,直接在地址栏刷新 /post/1 返回 Nginx 的 404,蜘蛛抓到的也全是 404 页。

一开始怀疑是「开发环境用 dev server 自带回退,掩盖了问题」,查了一圈,方向不对。

把日志和配置对完,能解释这个现象的基本就这几处。Nginx 没有配置回退到 index.html。少数情况下是只有首页命中静态文件,其余路径走文件系统查找失败。

还有一种情况,sitemap 里写的都是前端路由地址,全部返回 404。

第一件事是确认内页返回码

curl -sI https://www.example.com/post/1

然后加回退规则

location / { try_files $uri $uri/ /index.html; }

静态资源单独放行

location ~* \.(js|css|png|webp)$ { try_files $uri =404; }

复核配置并重载

nginx -t && nginx -s reload

改之前先确认了最近有没有人动过配置,避免白查一遍。

别只看报错消失,验证要多做一步。内页直接访问返回 200 且内容完整,日志里不再出现前端路由地址的 404,sitemap 提交后能正常读取。

回退规则很容易把不存在的静态资源也返回 200,形成软 404,静态目录必须单独放行。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189