日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

nginx rewrite規(guī)則怎么配置?


nginx rewrite規(guī)則怎么配置?


在url優(yōu)化過(guò)程中,不可避免的涉及到nginx rewrite規(guī)則 。那么nginx rewrite是如何配置的呢?
rewrite可以出現(xiàn)的地方有4個(gè):NGX_HTTP_SRV_CONF,NGX_HTTP_SIF_CONF,NGX_HTTP_LOC_CONF,NGX_HTTP_LIF_CONF 。分別對(duì)應(yīng)著:
NGX_HTTP_SRV_CONF:配置文件中的server域中的任何地方;
NGX_HTTP_SIF_CONF:配置文件中server域中的if配置中;
NGX_HTTP_LOC_CONF:配置文件中的location域中的任何地方;
NGX_HTTP_LIF_CONF:配置文件中的location域中的if配置中;
舉例如下:
//...
server {
//...
rewrite "^/+$" /index.phpbreak;
if ($uri ~* "^/+abc") {
rewrite "^/+abc" /abc/index.php break;
}
location /xy {
rewrite "^/+xy$" /xy/index.phpbreak;
}
}
?
1
其中l(wèi)ocation的詳細(xì)描述和location的強(qiáng)大功能可以在本網(wǎng)站搜索框中輸入“ngingx location”來(lái)搜索 。
補(bǔ)充
1.break指令
默認(rèn)值:none ;使用環(huán)境:server,location,if ;
該指令的作用是完成當(dāng)前的規(guī)則集,不再處理rewrite指令 。
2.if指令
默認(rèn)值:none ;使用環(huán)境:server,location
該指令用于檢查一個(gè)條件是否符合,如果條件符合,則執(zhí)行大括號(hào)內(nèi)的語(yǔ)句 。If指令不支持嵌套,不支持多個(gè)條件&&和||處理 。
A.變量名,錯(cuò)誤的值包括:空字符串""或者任何以0開(kāi)始的字符串
B.變量比較可以使用"="(表示等于)和"!="(表示不等于)
C.正則表達(dá)式模式匹配可以使用"~*"和"~"符號(hào)
D."~"符號(hào)表示區(qū)分大小寫(xiě)字母的匹配
E."~*"符號(hào)表示不區(qū)分大小寫(xiě)字母的匹配
F."!~"和"!~*"符號(hào)的作用剛好和"~"、"~*"相反,表示不匹配
G."-f"和"!-f"用來(lái)判斷文件是否存在
H."-d"和"!-d"用來(lái)判斷目錄是否存在
I."-e"和"!-e"用來(lái)判斷文件或目錄是否存在
J."-x"和"!-x"用來(lái)判斷文件是否為可執(zhí)行
K.部分正則表達(dá)式可以在()內(nèi),用$1~$9來(lái)訪問(wèn)
3.return指令
語(yǔ)法:return code ;使用環(huán)境:server,location,if ;
該指令用于結(jié)束規(guī)則的執(zhí)行并返回狀態(tài)碼給客戶端 。
示例:如果訪問(wèn)的URL以".sh"或".bash"結(jié)尾,則返回403狀態(tài)碼
location ~ .*.(sh|bash)?$
{
return 403;
}
4.rewrite 指令
語(yǔ)法:rewrite regex replacement flag
默認(rèn)值:none ; 使用環(huán)境:server,location,if
該指令根據(jù)表達(dá)式來(lái)重定向URI,或者修改字符串 。指令根據(jù)配置文件中的順序來(lái)執(zhí)行 。注意重寫(xiě)表達(dá)式只對(duì)相對(duì)路徑有效 。如果你想配對(duì)主機(jī)名,你應(yīng)該使用if語(yǔ)句,示例如下:
if( $host ~* www.(.*) )
{
set $host_without_www $1;
rewrite^(.*)$http://$host_without_www$1 permanent;
}
rewrite指令的最后一項(xiàng)參數(shù)為flag標(biāo)記,支持flag標(biāo)記有:
1.last相當(dāng)于apache里面的[L]標(biāo)記,表示rewrite 。
2.break本條規(guī)則匹配完成后,終止匹配,不再匹配后面的規(guī)則 。
3.redirect返回302臨時(shí)重定向,瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的URL地址 。
4.permanent返回301永久重定向, 瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的URL地址 。
使用last和break實(shí)現(xiàn)URI重寫(xiě),瀏覽器地址欄不變 。而且兩者有細(xì)微差別,使用alias指令必須用last標(biāo)記;使用proxy_pass指令時(shí),需要使用break標(biāo)記 。Last標(biāo)記在本條rewrite規(guī)則執(zhí)行完畢后,會(huì)對(duì)其所在server{......}標(biāo)簽重新發(fā)起請(qǐng)求,而break標(biāo)記則在本條規(guī)則匹配完成后,終止匹配 。
一般在跟location中(location /{...})或直接在server標(biāo)簽中編寫(xiě)rewrite規(guī)則,推薦使用last標(biāo)記;在非根location中(location /cms/{...}),則使用break 。
如果URI中含有參數(shù)(/app/test.php?id=5),默認(rèn)情況下參數(shù)會(huì)被自動(dòng)附加到替換串上,你可以通過(guò)在替換串的末尾加上?標(biāo)記來(lái)解決這一問(wèn)題 。

推薦閱讀