现在有这样一个需求,网站根目录下有静态文件,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之后需要再判断一次文件存在。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
更新日志
- 战锤40K星际战士2狙击职业介绍|狙击职业技能效果一览
- RobertSaxtonTheResurrectionoftheSoldiers(2024)[24Bit-192kHz]FLAC
- 唐成杨东哥弹唱《情若真HQ》头版限量编号[WAV+CUE]
- 柏菲·HIFI风情1《一杯香茶》限量开盘母带ORMCD[WAV+CUE]
- 发糖了!《黑神话》动画导演绘制八戒紫蛛儿中秋贺图
- “时光系列”新作《时光3:永耀之境》首曝:画风更真实的恋爱模拟RPG
- 《战地》游戏主管:始终认为《战地》未来销量能超越《使命召唤》
- 《伤感民谣 值得收藏的音乐极品 2CD》[WAV/分轨][1.2GB]
- 《邓紫棋 巨肺唱将小天后有心人 2CD》[WAV/分轨][1.2GB]
- 《迪克牛仔 坛奇精选 2CD台首版》 [WAV+CUE][600MB]
- 陈明.1998-为了爱影视歌曲+新歌【中唱】【WAV+CUE】
- 黄小琥.2009-简单/不简单【华纳】【WAV+CUE】
- 洪卓立.2010-TASTE.OF.LOVE新曲+精丫英皇娱乐】【WAV+CUE】
- 战锤40K星际战士2职业强度排行
- 交错战线PVE国家队成员以及常用角色推荐