Plainnotes

try_files 的两个常见误用

2024-08-27 · 2 分钟部署

try_files $uri $uri/ /index.html; 是 SPA 的标准写法,但两个细节容易错。

一,$uri/ 会尝试把 URI 当目录,如果目录存在且开了 autoindex,就会列出文件列表;没开则走下一个候选。对纯静态站,通常不需要这一项。

二,最后一个参数如果不是 =404 而是路径,所有未命中的请求都会返回那个文件,**包括不存在的静态资源**——浏览器拿到的是 HTML,却按 JS 解析,报语法错误。

更严谨的写法:

location / {
    try_files $uri $uri/ /index.html;
}
location /assets/ {
    try_files $uri =404;
}

静态资源目录单独处理,找不到就老老实实 404,别回退到 index.html。