nginx try_files指令判斷文件是否存在實例
現(xiàn)在有這樣一個需求,網(wǎng)站根目錄下有靜態(tài)文件,static目錄下也有靜態(tài)文件,static目錄下的靜態(tài)文件是程序批量生成的,我想讓nginx在地址不變的前提下優(yōu)先使用static目錄里面的文件,如果不存在再使用根目錄下的靜態(tài)文件,比如訪問首頁http://example.com/index.html則nginx返回/static/index.html,如果不存在返回/index.html。
經(jīng)過一番研究可以用if指令實現(xiàn),關鍵配置如下,這條配置需要放到靠前的位置
if (-e $document_root/static$request_uri) {
rewrite ^/(.*)$ /static/$1 break;
break;
}
這里有兩點需要注意:
nginx變量默認應該開頭有反斜線而結尾沒有。
nginx字符串和變量可以直接連接,如果可能有歧義可以花括號括起變量名稱,整個字符串必須加雙引號
是用這種方式有一個缺點,index指令指定的文件不會起作用,比如訪問http://example.com/就會404,必須顯示的指定文件名才行http://example.com/index.html??梢杂胷ewrite修復,但是感覺不爽,在nginx陷阱頁面突然發(fā)現(xiàn)一個針對性的指令try_files
set $static "/static";
try_files $static$uri $static$uri/index.html /index.php;
參考頁面
http://wiki.nginx.org/Pitfalls
后來發(fā)現(xiàn)$uri變量本身會自動添加index.html后綴,經(jīng)過實驗這樣寫也是可以的
if (-e "${document_root}/static${uri}") {
rewrite ^/(.*)$ /static/$uri break;
}
if (-e $request_filename) {
break;
}
因為最后不存在的文件都寫到index.php去了所以上面rewrite之后需要再判斷一次文件存在。
相關文章
阿里云國際版使用Nginx作為HTTPS轉發(fā)代理服務器的處理方法
本文介紹了使用NGINX作為HTTPS流量轉發(fā)代理的兩種方法。它總結了NGINX使用HTTP?CONNECT隧道和NGINX流充當HTTPS轉發(fā)代理的解決方案的原則,環(huán)境構建要求,應用場景和關鍵問題2022-05-05
Nginx解決Http慢攻擊(Slow HTTP Attack)的方法
緩慢的HTTP拒絕服務攻擊是一種專門針對于Web的應用層拒絕服務攻擊,本文給大家介紹了Nginx解決Http慢攻擊(Slow HTTP Attack)的方法,需要的朋友可以參考下2024-02-02
Nginx下WordPress鏈接(url偽靜態(tài))301永久重定向實現(xiàn)方法
在幾個blog程序中折騰的結果,導致url連續(xù)二次變化。這是第三次了。 nginx 通過rewrite 使用 permanent; 參數(shù) 成301永久url重定向2012-09-09

