目錄
一、Rewrite跳轉(zhuǎn)場(chǎng)景
二、Rewrite跳轉(zhuǎn)實(shí)現(xiàn)
三、Rewrite實(shí)際場(chǎng)景
1.nginx跳轉(zhuǎn)需求的實(shí)現(xiàn)方式:
2.rewrite放在server{},if{},location{}段中
3.對(duì)域名或參數(shù)字符串
四、Rewrite正則表達(dá)式
五、Rewrite命令/語(yǔ)法格式
六、Location分類(lèi)
1. location 大致可以分為三類(lèi):
2.location 常用的匹配規(guī)則:
七、Location優(yōu)先級(jí)
八、Rewrite和Location比較
1.相同點(diǎn)
2.不同點(diǎn)
3.rewrite會(huì)寫(xiě)在location里,執(zhí)行順序
九、跳轉(zhuǎn)小案例
十、總結(jié)
1.優(yōu)先級(jí)總結(jié):
2.location 匹配?
3.rewrite和location比較
4.實(shí)際網(wǎng)站使用中,至少有三個(gè)匹配規(guī)則定義:
一、Rewrite跳轉(zhuǎn)場(chǎng)景
URL看起來(lái)更規(guī)范、合理
企業(yè)會(huì)將動(dòng)態(tài)URL地址偽裝成靜態(tài)地址提供服務(wù)
網(wǎng)址換新域名后,讓舊的訪(fǎng)問(wèn)跳轉(zhuǎn)到新的域名上
服務(wù)端某些業(yè)務(wù)調(diào)整
ps:??
URL:就是一個(gè)具體路徑/位置
URI:指的是一個(gè)擁有相同類(lèi)型/特性的對(duì)象集合
URN:用名稱(chēng)定位
二、Rewrite跳轉(zhuǎn)實(shí)現(xiàn)
通過(guò)ngx_http_rewrite_module這個(gè)模塊來(lái)實(shí)現(xiàn),而這個(gè)模塊內(nèi)有四部分來(lái)組成:
Nignx:支持URL重寫(xiě)、支持if條件判斷,但不支持else
跳轉(zhuǎn):循環(huán)最多可以執(zhí)行10次,超過(guò)后nginx將返回500錯(cuò)誤
PCRE支持:rewrite使用nginx全局變量或自己設(shè)置的變量,結(jié)合正則表達(dá)式和標(biāo)志位實(shí)現(xiàn)URL重寫(xiě)以及重定向
重寫(xiě) 模塊:set指令
三、Rewrite實(shí)際場(chǎng)景
1.nginx跳轉(zhuǎn)需求的實(shí)現(xiàn)方式:
使用rewrite進(jìn)行匹配跳轉(zhuǎn)
使用if匹配全局變量后跳轉(zhuǎn)
使用location匹配再跳轉(zhuǎn)
2.rewrite放在server{},if{},location{}段中
location只對(duì)域名后面的出去傳遞參數(shù)外的字符串起作用
3.對(duì)域名或參數(shù)字符串
使用if全局變量匹配
使用proxy_pass反向代理
四、Rewrite正則表達(dá)式
字符 | 說(shuō)明 |
^ | 匹配輸入字符串的起始位置 |
& | 匹配輸入字符串的結(jié)束位置 |
* | 匹配前面的字符零次或多次 |
+ | 匹配前面的字符一次或多次 |
? | 匹配前面的字符零次或一次 |
. | 匹配除“\n”之外的任何單個(gè)字符 |
\ | 將后面接著的字符標(biāo)記為一個(gè)特殊字符或一個(gè)原義字符或一個(gè)向后引用 |
\d | 匹配純數(shù)字 |
{n}? | 重復(fù) n 次 |
{n,}? | 重復(fù) n 次或更多次 |
{n,m}? | 重復(fù) n 到 m 次 |
[ ] | 定義匹配的字符范圍 |
[c] | 匹配單個(gè)字符 c |
[a-z] | 匹配 a-z 小寫(xiě)字母的任意一個(gè) |
[a-zA-Z0-9] | 匹配所有大小寫(xiě)字母或數(shù)字 |
( ) | 表達(dá)式的開(kāi)始和結(jié)束位置 |
| | 或運(yùn)算符 |
五、Rewrite命令/語(yǔ)法格式
?
?flag標(biāo)記說(shuō)明
標(biāo)記 | 說(shuō)明 |
last | 相當(dāng)于Apache的[L]標(biāo)記,表示完成rewrite |
break | 本條規(guī)則匹配完成即終止,不再匹配后面的任何規(guī)則 |
redirect | 返回302臨時(shí)重定向,瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的URL地址,爬蟲(chóng)不會(huì)更新URL |
permanent | 返回301永久重定向,瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的URL地址,爬蟲(chóng)更新URL |
last :在本條規(guī)則完成后,繼續(xù)向下匹配新的location URL規(guī)則,一般用在server和if當(dāng)中
break :和last類(lèi)似,但是不會(huì)重新發(fā)起一次處理過(guò)程,而是直接返回處理結(jié)果,一般用在location當(dāng)中
redirect :該標(biāo)記表示當(dāng)前規(guī)則匹配成功后立即進(jìn)行重定向操作(臨時(shí))
permanent :該標(biāo)記和redirect類(lèi)似,永久性重定向
set :表示當(dāng)前規(guī)則匹配成功后設(shè)置一個(gè)變量,并把變量傳入下一條規(guī)則
六、Location分類(lèi)
1. location 大致可以分為三類(lèi):
精準(zhǔn)匹配:location = / {...}
一般匹配:location / {...}?
正則匹配:location ~ / {...}
2.location 常用的匹配規(guī)則:
標(biāo)記 | 說(shuō)明 |
= | 進(jìn)行普通字符精確匹配,也就是完全匹配 |
^~ | 表示普通字符匹配,使用前綴匹配 |
~ | 區(qū)分大小寫(xiě)的匹配 |
~* | 不區(qū)分大小寫(xiě)的匹配 |
!~ | 區(qū)分大小寫(xiě)的匹配取非 |
!~* | 不區(qū)分大小寫(xiě)的匹配取非 |
@ | 定義一個(gè)命名的location,使用在內(nèi)部定向時(shí) |
七、Location優(yōu)先級(jí)
首先精確匹配 =
其次前綴匹配 ^~
其次是按文件中順序的正則匹配 ~或~*
然后匹配不帶任何修飾的前綴匹配
最后是交給 / 通用匹配 ? ??
八、Rewrite和Location比較
1.相同點(diǎn)
都能實(shí)現(xiàn)跳轉(zhuǎn)
2.不同點(diǎn)
rewrite是在同一域名內(nèi)更改獲取資源的路徑
location是對(duì)一類(lèi)路徑做控制訪(fǎng)問(wèn)或反向代理,還可以proxy_pass到其他機(jī)器
3.rewrite會(huì)寫(xiě)在location里,執(zhí)行順序
執(zhí)行server塊里面的rewrite指令
執(zhí)行l(wèi)ocation匹配
執(zhí)行選定的location中的rewrite指令
九、跳轉(zhuǎn)小案例
基于域名的跳轉(zhuǎn):
#修改配置文件
重啟服務(wù)
瀏覽器模擬訪(fǎng)問(wèn)www.kgc.com會(huì)跳轉(zhuǎn)到www.benet.com
模擬訪(fǎng)問(wèn)www.kgc.com/test會(huì)跳轉(zhuǎn)到www.benet.com/test,查看元素可以看到返回301,實(shí)現(xiàn)了永久重定向跳轉(zhuǎn),而且域名后的參數(shù)也正常跳轉(zhuǎn)。
十、總結(jié)
1.優(yōu)先級(jí)總結(jié):
(location = 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (location /)
2.location 匹配?
首先看 優(yōu)先級(jí):精確>前綴>正則>一般>通用
優(yōu)先級(jí)相同:正則看上下順序,上面的優(yōu)先;一般匹配看長(zhǎng)度,最長(zhǎng)匹配的優(yōu)先
精確、前綴、正則、一般 都沒(méi)有匹配到,最后再看通用匹配 ?一般匹配
3.rewrite和location比較
rewrite:改寫(xiě)訪(fǎng)問(wèn)的URL路徑 ?(被訪(fǎng)問(wèn)的HTML/HTM/CSS文件)
location:對(duì)一類(lèi)地址進(jìn)行權(quán)限控制(認(rèn)證控制)+ 跳轉(zhuǎn)(跨服務(wù)器進(jìn)行URL跳轉(zhuǎn))
4.實(shí)際網(wǎng)站使用中,至少有三個(gè)匹配規(guī)則定義:
第一個(gè)必選規(guī)則
直接匹配網(wǎng)站根,通過(guò)域名訪(fǎng)問(wèn)網(wǎng)站首頁(yè)比較頻繁,使用這個(gè)會(huì)加速處理,比如說(shuō)官網(wǎng)??梢允且粋€(gè)靜態(tài)首頁(yè),也可以直接轉(zhuǎn)發(fā)給后端應(yīng)用服務(wù)器
第二個(gè)必選規(guī)則
處理靜態(tài)文件請(qǐng)求,這是nginx作為http服務(wù)器的強(qiáng)項(xiàng)有兩種配置模式,目錄匹配或后綴匹配,任選其一或搭配使用
第三個(gè)規(guī)則文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-728248.html
通用規(guī)則,比如用來(lái)轉(zhuǎn)發(fā)帶.php、.jsp后綴的動(dòng)態(tài)請(qǐng)求到后端應(yīng)用服務(wù)器非靜態(tài)文件請(qǐng)求就默認(rèn)是動(dòng)態(tài)請(qǐng)求文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-728248.html
到了這里,關(guān)于Nginx Rewrite詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!