try_files 是 nginx 中 http_core 核心模块所带的指令,主要是能替代一些 rewrite 的指令,提高解析效率。
Nginx try_files 的作用是按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。
需要注意的是,只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部 URI 的指向。最后一个参数是回退 URI 且必须存在,否则会出现内部 500 错误。命名的 location 也可以使用在最后一个参数中。与 rewrite 指令不同,如果回退 URI 不是命名的 location 那么 $args 不会自动保留,如果你想保留 $args,则必须明确声明。
try_files file ... uri
try_files file ... = code
server location
try_files $uri $uri/ /index.php?q=$uri&$args;
server {
listen 8000;
server_name 192.168.119.100;
root html;
index index.html index.php;
location /abc {
try_files /4.html /5.html @qwe;
}
location @qwe {
rewrite ^/(.*)$ http://www.haicoder.net;
}
检测文件 4.html 和 5.html,如果存在正常显示,不存在就去查找 @qwe 值。也就是跳转到嗨客网页面。
location /haicoder/ {
try_files $uri /haicoder/default.gif;
}
当访问 www.example.com/haicoder/123/321
(文件不存在)时,此时看到的是 default.gif 图片,URL 地址不变。访问 www.example.com/haicoder/123.png
(文件存在)时,此时看到的是 123.png 图片,URL 地址不变。
也就说说当 images 目录下文件不存在时,默认返回 default.gif。
location /haicoder/ {
try_files $uri =403;
}
当访问 www.example.com/haicoder/123.html
(文件存在)时,此时看到的是 123.html 内容,URL 地址不变。当访问 www.example.com/haicoder/21.html
(文件不存在)时,此时看到的是 403 状态,URL 地址不变。
location /haicoder/ {
try_files $uri @ab;
}
location @ab {
rewrite ^/(.*)$ https://blog.haicoder.com;
}
当访问 www.example.com/haicoder/123.html
(文件存在)时,此时看到的是 123.html 内容,URL 地址不变。当访问 www.example.com/haicoder/21.html
(文件不存在)时,此时跳转到 haicoder.net
,URL 地址改变。
总结:当文件不存在时,会去查找 @ab 值,此时在 location 中定义 @ab 值跳转。
我们首先,使用 vim 修改 /etc/nginx/conf.d/default.conf
配置,具体命令如下:
vim /etc/nginx/conf.d/default.conf;
现在,我们配置 url 重写规则,具体配置如下:
server { listen 80; location /haicoder/ { try_files $uri @ab; } location @ab { rewrite ^/(.*)$ https://www.haicoder.net; }}
配置修改完成后,此时,如下图所示:
修改完毕后,我们启动 nginx,具体命令如下:
nginx
现在,我们使用浏览器访问,如下页面: