Nginx的配置语法灵活,可控制度非常高。在0.7以后的版本中加入了一个try_files指令,配合命名location,可以部分替代原本常用的rewrite配置方式,提高解析效率。
try_files指令:
语法:try_files file … uri 或 try_files file … = code
默认值:无
作用域:server location
下面是一个示例:
当用户在浏览器输入http://192.168.170.10或者http://192.168.170.10/index.html或者http://192.168.170.10/index.php时,根据try_files规则,可以找到该域名对应的web页面;
现在有两个项目,通过不同路径来区分,需求是当用户访问该项目不存在的路径的时候,返回当前项目的登录页面
需求是当访问:http://192.168.170.10/test/abc/def 等不存在的页面,返回http://192.168.170.10/test页面
需求是当访问:http://192.168.170.10/app/abc/def 等不存在的页面,返回http://192.168.170.10/app页面
需求是当访问:http://192.168.170.10/ghi/abc/def 等不存在的页面,返回http://192.168.170.10/404.html页面
当用户在浏览器输入http://192.168.170.10/test/abc/def等不存在的域名时,根据try_files规则,“$uri”和“$uri/”都不符合,所以nginx就自动把域名转换为http://192.168.170.10/test,然后将http://192.168.170.10/test页面内容反馈给客户端,但是客户端的url还是http://192.168.170.10/test/abc/def不变
try_files的作用是按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。
需要注意的是,只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向(如下图)。最后一个参数是回退URI且必须存在,否则会出现内部500错误。
[root@master-10 /data/web]#tree . . ├── 404.html ├── app │?? └── index.html ├── hourse │?? └── index.html ├── index.html └── test ├── index.html └── pc └── index.html 3 directories, 5 files [root@master-10 /data/web]#cat 404.html 404 [root@master-10 /data/web]#cat app/index.html /data/web/app [root@master-10 /data/web]#cat hourse/index.html /data/web/hourse [root@master-10 /data/web]#cat index.html /data/web [root@master-10 /data/web]#cat test/index.html /data/web/test [root@master-10 /data/web]#cat test/pc/index.html /data/web/test/pc [root@master-10 /usr/local/nginx/conf/conf.d]#cat 80.conf # # The default server # server { listen 80 default_server; server_name _; root /data/web; location / { index index.html index.htm index.php; try_files $uri $uri/ /404.html; } location /test { try_files $uri $uri/ /test/index.html; } location /app { try_files $uri $uri/ /app/index.html; } }
一个项目的首页
当访问url不存在的时候,返回/app的页面,但是url不变,只是将/app的内容返回
当访问其他路径不存在的时候,返回主页的404页面
首页
只要路径存在,就能正常访问,上面的try_files是针对的不存在的页面才会处理
–
–
–
评论前必须登录!
注册