服务器之家

服务器之家 > 正文

nginx try_files指令判断文件是否存在实例

时间:2019-10-26 17:09     来源/作者:nginx教程网

现在有这样一个需求,网站根目录下有静态文件,static目录下也有静态文件,static目录下的静态文件是程序批量生成的,我想让nginx在地址不变的前提下优先使用static目录里面的文件,如果不存在再使用根目录下的静态文件,比如访问首页http://example.com/index.html则nginx返回/static/index.html,如果不存在返回/index.html。

经过一番研究可以用if指令实现,关键配置如下,这条配置需要放到靠前的位置

复制代码代码如下:

if (-e $document_root/static$request_uri) {
 rewrite ^/(.*)$ /static/$1 break;
 break;
}


这里有两点需要注意:

 

nginx变量默认应该开头有反斜线而结尾没有。

nginx字符串和变量可以直接连接,如果可能有歧义可以花括号括起变量名称,整个字符串必须加双引号

 

复制代码代码如下:
"${document_root}/static${request_uri}"

 

是用这种方式有一个缺点,index指令指定的文件不会起作用,比如访问http://example.com/就会404,必须显示的指定文件名才行http://example.com/index.html。可以用rewrite修复,但是感觉不爽,在nginx陷阱页面突然发现一个针对性的指令try_files

复制代码代码如下:

set $static "/static";
try_files $static$uri $static$uri/index.html /index.php;

 

参考页面

http://wiki.nginx.org/Pitfalls

后来发现$uri变量本身会自动添加index.html后缀,经过实验这样写也是可以的

复制代码代码如下:


if (-e "${document_root}/static${uri}") {
 rewrite ^/(.*)$ /static/$uri break;
}

 

if (-e $request_filename) {
 break;
}


因为最后不存在的文件都写到index.php去了所以上面rewrite之后需要再判断一次文件存在。

标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字 2019-06-05
返回顶部