nginx try_files指令判断文件是否存在实例
2015-02-13 08:53
1291 查看
现在有这样一个需求,网站根目录下有静态文件,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之后需要再判断一次文件存在。
您可能感兴趣的文章:
相关文章推荐
- C语言判断文件夹或者文件是否存在以及权限等信息access函数和删除文件或目录 remove()函数使用实例
- VB.Net判断目录或文件是否存在的实例
- Python 判断文件或目录是否存在的实例代码
- javascript判断文件是否存在实例代码
- 代码实例Java IO判断目录和文件是否存在
- asp.net判断服务器上的目录或文件是否存在!(实例)
- 请问怎样书写SQL脚本,以判断某个路径下的某个文件是否存在?
- 判断远程文件是否存在的php函数
- 判断文件或文件夹是否存在
- 如何判断一个文件或目录是否存在
- 用commons-net ftpclient 怎么判断服务器是否存在文件A??
- C/C++中判断某一文件或目录是否存在
- sql判断文件是否存在
- 在Visual foxpro 中判断文件是否存在的函数
- 判断文件是否存在
- Function:判断一个文件是否存在
- 判断是否有文件存在
- 判断文件是否存在
- VB中如何判断文件、文件夹是否存在
- C++基础:怎样判断某一文件是否存在