rewite
在server塊下,會(huì)優(yōu)先執(zhí)行rewrite部分勋功,然后才會(huì)去匹配location塊
server中的rewrite break和last沒(méi)什么區(qū)別怜庸,都會(huì)去匹配location馏鹤,所以沒(méi)必要用last再發(fā)起新的請(qǐng)求砖织,可以留空
location中的rewirte:
不寫(xiě)last和break - 那么流程就是依次執(zhí)行這些rewrite
1. rewrite break - url重寫(xiě)后款侵,直接使用當(dāng)前資源,不再執(zhí)行l(wèi)ocation里余下的語(yǔ)句侧纯,完成本次請(qǐng)求新锈,地址欄url不變
2. rewrite last - url重寫(xiě)后,馬上發(fā)起一個(gè)新的請(qǐng)求眶熬,再次進(jìn)入server塊妹笆,重試location匹配,超過(guò)10次匹配不到報(bào)500錯(cuò)誤娜氏,地址欄url不變
3. rewrite redirect – 返回302臨時(shí)重定向拳缠,地址欄顯示重定向后的url,爬蟲(chóng)不會(huì)更新url(因?yàn)槭桥R時(shí))
4. rewrite permanent – 返回301永久重定向, 地址欄顯示重定向后的url牍白,爬蟲(chóng)更新url
使用last會(huì)對(duì)server標(biāo)簽重新發(fā)起請(qǐng)求
如果location中rewrite后是對(duì)靜態(tài)資源的請(qǐng)求脊凰,不需要再進(jìn)行其他匹配,一般要使用break或不寫(xiě)茂腥,直接使用當(dāng)前l(fā)ocation中的數(shù)據(jù)源,完成本次請(qǐng)求
如果location中rewrite后切省,還需要進(jìn)行其他處理最岗,如動(dòng)態(tài)fastcgi請(qǐng)求(.php,.jsp)等,要用last繼續(xù)發(fā)起新的請(qǐng)求
(根的location使用last比較好, 因?yàn)槿绻?php等f(wàn)astcgi請(qǐng)求還要繼續(xù)處理)
使用alias指定源:必須使用last
if語(yǔ)句主要用來(lái)判斷一些在rewrite語(yǔ)句中無(wú)法直接匹配的條件,比如檢測(cè)文件存在與否,http header,cookie等
location匹配規(guī)則及優(yōu)先級(jí)
- = 嚴(yán)格匹配這個(gè)查詢朝捆。如果找到般渡,停止搜索。
- ^~ 匹配路徑的前綴芙盘,如果找到驯用,停止搜索。
- ~ 為區(qū)分大小寫(xiě)的正則匹配
- ~* 為不區(qū)分大小寫(xiě)匹配
優(yōu)先級(jí): =, ^~, /*, 無(wú)
break語(yǔ)句
放在server塊rewrite語(yǔ)句前面
如果是直接請(qǐng)求某個(gè)真實(shí)存在的文件,則用break語(yǔ)句停止rewrite檢查
if (-f $request_filename) {
break;
}