Nginx-try_files指令

官方文档

try_files指令
语法:
try_files file ... uri
try_files file ... = code
默认值:无
作用域:server location

指令解析

其作用是按顺序检查$document_root下的文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。

需要注意的是,只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误。 如果不注意会有死循环造成500错误

命名的location也可以使用在最后一个参数中。与rewrite指令不同,如果回退URI不是命名的location那么$args不会自动保留,如果你想保留$args,则必须明确声明。
try_files $uri $uri/ /index.php?q=$uri&$args;

示例

location ~ .*.(js|css|fonts|jpg|ico|jpeg|png)$ {
root /data/site/;
try_files $uri /static/$uri /static/$uri/ @zgyd11;
}
说明:
当匹配到此 location 的时候,定位$document_root到 /data/site/
然后检查 /data/site/$uir
有 则直接返回文件数据
没有 则检查第二个文件【/static/$uri】
处理逻辑与参数1的处理逻辑一样,没有 则检查第三个目录【/static/$uri/】
还没找到,则发送到指定的 location
@zgyd11 表示配置文件中的一个预定点,配置如下:
location @zgyd11 {
proxy_pass http://localhost:8080;
}

示例:$query_string为空的解决办法

try_files $uri $uri/ /index.php?$query_string;