Nginx 指令 try_files

类似与nginx rewrite指令

语法规则:try_files file … uri; 功能,寻找指定文件,如果找不到,则内部跳转至指定的uri,只有最后一个参数才能进行跳转。 (内部跳转,就是在nginx内部的location中进行重新匹配,而不是让客户端发起新的http请求)

示例:

1
2
3
4
5
6
7
8
# nginx配置示例
# 已知条件 /data/shop是目录、其目录下只有index.html文件

location /shop {
	root /data;
	index index.html;
	try_files $uri /shop/index.html;
}

简单描述上述配置的作用,凡是访问该域名下, 以/shop开头(包括自身)的URI,请求的URI的结果都是/shop/index.html。 $uri表示请求的uri字符串,例如:www.x.com/a/b,uri则是/a/b。

  1. 基于现在的配置,访问www.abc.com/shop, 得到的uri则是/shop,而/shop是目录,在不指定访问文件时,默认访问index.html。
  2. 因此映射到服务器,就是寻找/data/shop/index.html文件,如果不存在,则在nginx内部location中,以/shop/index.html为uri进行重新访问,最终找不到返回404页面文件。
  3. 所以如果访问www.abc.com/shop/zzz,所映射到服务器的路径则是/data/shop/zzz,如果存在,直接返回;否则返回/data/shop/index.html文件。

结果就是

1
www.abc.com/shop* -> www.abc.com/shop/index.html