当前位置: 首页 > 编程笔记 >

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

卫烨
2023-03-14
本文向大家介绍nginx try_files指令判断文件是否存在实例,包括了nginx try_files指令判断文件是否存在实例的使用技巧和注意事项,需要的朋友参考一下

现在有这样一个需求,网站根目录下有静态文件,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之后需要再判断一次文件存在。

 类似资料:
  • 本文向大家介绍javascript判断文件是否存在实例代码,包括了javascript判断文件是否存在实例代码的使用技巧和注意事项,需要的朋友参考一下  javascript判断文件是否存在 1. 客户端 2. 服务器端  感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 函数名称:判断文件(夹)是否存在 函数功能: 判断文件(夹)是否存在 函数方法 flag = file.isExist(path) 参数 类型 必填 说明 path string 是 需要判断的文件(夹)路径 返回值 类型 说明 flag boolean true - 文件(夹)存在,false - 文件(夹)不存在 函数用例 path = "/sdcard/LuaBox/Projects/" f

  • 本文向大家介绍C#判断指定文件是否是只读的方法,包括了C#判断指定文件是否是只读的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#判断指定文件是否是只读的方法。分享给大家供大家参考。具体如下: C#可以通过FileInfo类获得文件属性,文件属性包含了文件是否是只读的 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍VC++ 使用 _access函数判断文件或文件夹是否存在,包括了VC++ 使用 _access函数判断文件或文件夹是否存在的使用技巧和注意事项,需要的朋友参考一下 _access函数 参数 path 文件或目录路径。 mode 读/写特性。 返回值   如果文件包含特定模式,每个函数返回 0。 函数返回 - 1,则名称文件不存在或不具有特定模式;在这种情况下,如下表errno 所示

  • 本文向大家介绍js判断某个方法是否存在实例代码,包括了js判断某个方法是否存在实例代码的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js判断某个方法是否存在的代码。分享给大家供大家参考。 具体代码如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • 问题内容: 我有这段代码,用于检查从我的应用程序中许多地方调用的Activity的Intent中是否有多余的值: 如果未设置isNewItem,我的代码会崩溃吗?在我调用它之前,有什么方法可以告诉它是否已设置吗? 处理此问题的正确方法是什么? 问题答案: 正如其他人所说,两者和都可能返回null。因此,您不想将调用链接在一起,否则您可能最终会调用,这将引发并导致应用程序崩溃。 这就是我要完成的方法