try_files 是 Nginx 中一个非常有用的指令,用于按顺序检查文件是否存在,并返回第一个找到的文件。如果所有指定的文件都不存在,则执行回退逻辑,如重定向到一个指定的 URI 或返回一个错误代码。
作用
文件查找:按顺序检查多个文件路径,直到找到存在的文件。
错误处理:如果所有路径都不存在,可以返回一个指定的错误页面或重定向到其他 URI。
灵活配置:适用于单页应用(SPA)等场景,确保所有请求都能正确处理。
语法
try_files file1 [file2 ...] fallback;
file1, file2, …:按顺序检查的文件路径。
fallback:如果所有文件都不存在,则执行的回退逻辑,可以是一个 URI 或 HTTP 状态码。
示例
1.基本示例
location / {try_files $uri $uri/ =404;
}
尝试访问请求的 URI 对应的文件($uri)。
如果找不到,尝试访问请求的 URI 对应的目录($uri/)。
如果都找不到,返回 404 错误。
2.单页应用(SPA)
location / {try_files $uri $uri/ /index.html;
}
尝试访问请求的 URI 对应的文件($uri)。
如果找不到,尝试访问请求的 URI 对应的目录($uri/)。
如果都找不到,重定向到 index.html,让前端路由处理请求。
3.带有参数的 URL
location / {try_files $uri $uri/ /index.php?$query_string;
}
尝试访问请求的 URI 对应的文件($uri)。
如果找不到,尝试访问请求的 URI 对应的目录($uri/)。
如果都找不到,重定向到 index.php 并附加查询字符串。
4.指定回退文件
location /pngs/ {root /data/user/;index index.html index.htm;try_files $uri $uri/ /pngs/file.png;
}
尝试访问请求的 URI 对应的文件($uri)。
如果找不到,尝试访问请求的 URI 对应的目录($uri/)。
如果都找不到,重定向到 /pngs/file.png。
查找逻辑
$uri:检查请求的 URI 对应的文件。
$uri/:检查请求的 URI 对应的目录。
回退逻辑:如果所有路径都不存在,执行回退逻辑(如返回 404 或重定向)。