直接在 location / 块里写 try_files $uri $uri/ /index.html; 可解决 SPA 刷新子路由 404 问题,但需前置静态资源正则匹配(如 js/css 图片)和独立 API location(如 /api/)以避免误兜底,子路径部署时还需调整兜底路径为 /admin/index.html 并正确使用 alias。

直接在 location / 块里写 try_files $uri $uri/ /index.html; 就能解决 SPA 刷新子路由 404 的问题,前提是静态资源和后端接口不被它误兜底。
必须放在 location / 里,不能放 server 根级别try_files 要生效,得作用于所有前端页面请求。如果写在 server 块顶层,API 或图片请求可能被错误重写成 /index.html,导致接口返回 HTML 内容、JS 加载失败。正确做法是只让它管“该由前端接管但又没对应文件”的路径。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
静态资源要提前拦截,避免被兜底
浏览器请求 /js/app.abc123.js 时,Nginx 必须直接返回这个文件,而不是走 try_files 最后落到 /index.html。加一条正则 location 即可:
-
location ~* \.(js|css|png|jpg|gif|svg|woff2?|ttf|eot)$ { expires 1y; }
这条规则优先匹配资源后缀,命中就直接返回,根本不会进location /的try_files流程。
后端接口必须单独声明,防止被 fallback
比如 API 都在 /api/ 下,就得显式配一个 location /api/ 块:
-
location /api/ { proxy_pass http://backend/; }
注意结尾斜杠要对齐:/api/匹配/api/users,而proxy_pass http://backend/会把/api/users转发为/users。如果漏了斜杠,路径会被错误拼接。
子路径部署(如 /admin/)要调整兜底路径
项目部署在二级路径,比如访问地址是 https://example.com/admin/,就不能再用 /index.html:
-
location /admin/ { alias /var/www/myapp/; try_files $uri $uri/ /admin/index.html; }
关键点:alias后路径末尾不能多斜杠;/admin/index.html是相对于alias目录的内部路径,不是 URL。
验证是否真起作用,看两个地方
- 用
curl -I https://yoursite.com/some-unknown-route,状态码要是200,不是404或302 - 打开浏览器开发者工具 → Network 标签页,刷新一个子页面(如
/user/profile),检查 HTML 响应内容是不是index.html的源码,同时 JS/CSS 文件状态码都应是200,没有404报错










