溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Rewrite跳轉(zhuǎn)原理和實(shí)現(xiàn)方法

發(fā)布時(shí)間:2020-06-08 09:21:28 來(lái)源:億速云 閱讀:408 作者:Leah 欄目:云計(jì)算

本文將為大家詳細(xì)介紹Rewrite的跳轉(zhuǎn)原理和實(shí)現(xiàn)方法,內(nèi)容詳細(xì)步驟清晰,細(xì)節(jié)處理妥當(dāng),希望大家通過(guò)這篇文章有所收獲,我們先來(lái)看看Rewrite的跳轉(zhuǎn)原理

Rewrite跳轉(zhuǎn)場(chǎng)景

URL看起來(lái)更規(guī)范,合理
企業(yè)會(huì)將動(dòng)態(tài)URL地址偽裝成靜態(tài)地址提供服務(wù)
網(wǎng)址換新域名后,讓舊的訪問(wèn)跳轉(zhuǎn)到新的域名上
服務(wù)端某些業(yè)務(wù)調(diào)整

Rewrite跳轉(zhuǎn)實(shí)現(xiàn)

Rewrite跳轉(zhuǎn)原理和實(shí)現(xiàn)方法

Rewrite實(shí)用場(chǎng)景

  • Nginx跳轉(zhuǎn)需求的實(shí)現(xiàn)方式
    使用rewrite進(jìn)行匹配跳轉(zhuǎn)
    使用if匹配全局變量后跳轉(zhuǎn)
    使用location匹配再跳轉(zhuǎn)
  • rewrite放在server{},if{},location{}段中
  • 對(duì)域名或參數(shù)字符串
    使用if全局變量匹配
    使用proxy_pass反向代理

常用的正則表達(dá)式元字符

字符說(shuō)明
^匹配輸入字符串的起始位置
$匹配輸入字符串的結(jié)束位置
*匹配前面的字符零次或多次
+匹配前面的字符一次或多次
?匹配前面的字符零次或一次
.匹配除\n之外的任何單個(gè)字符,使用諸如"[.\n]"之類的模式,可匹配包括"\n"在內(nèi)的任意字符
\d匹配純數(shù)字  [0-9]
{n}重復(fù)多次
{n,}重復(fù)n次或更多次
[c]匹配單個(gè)字符c
[a-z]匹配a-z小寫字母的任意一個(gè)
[a-zA-Z]匹配a-z小寫字母或A-Z大寫字母的任意一個(gè)

Rewrite命令

語(yǔ)法:
rewrite <regex>            <replacement>             [flag];
            正則                  跳轉(zhuǎn)后的內(nèi)容               rewrite支持的flag標(biāo)記

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和break比較:

lastbreak
使用場(chǎng)景一般寫在server和if中一般使用在location中
URL匹配不終止重寫后的url匹配終止重寫后的url匹配

location分類

分類:
    location = patt {} [精準(zhǔn)匹配]
    location patt {} [一般匹配]
    location ~ patt {} [正則匹配]

正則匹配的常用表達(dá)式:

標(biāo)記說(shuō)明
~執(zhí)行一個(gè)正則匹配,區(qū)分大小寫
~*執(zhí)行一個(gè)正則匹配,不區(qū)分大小寫
!~執(zhí)行一個(gè)正則匹配,區(qū)分大小寫不匹配
!~*執(zhí)行一個(gè)正則匹配,不區(qū)分大小寫不匹配
^~普通字符匹配;使用前綴匹配。如果匹配成功,則不再匹配其他location
=普通字符精準(zhǔn)匹配。也就是完全匹配
@定義一個(gè)命名的location,使用在內(nèi)部定向時(shí)

location優(yōu)先級(jí)

**相同類型的表達(dá)式,字符創(chuàng)長(zhǎng)的會(huì)優(yōu)先匹配**
**按優(yōu)先級(jí)排列**
    = 類型
    ^~ 類型表達(dá)式
    正則表達(dá)式(~和~*)類型
    常規(guī)字符串匹配類型,按前綴匹配
    通常匹配(/),如果沒(méi)有其他匹配,任何請(qǐng)求都會(huì)匹配到

比較rewrite和location

**相同點(diǎn)**
        都能實(shí)現(xiàn)跳轉(zhuǎn)
**不同點(diǎn)**
        rewrite是在同一域名內(nèi)更改獲取資源的路徑
        location是對(duì)一類路徑做控制訪問(wèn)或方向代理,還可以proxy_pass到其他機(jī)器
**rewrite會(huì)寫在location里執(zhí)行順序**
        執(zhí)行server塊里面的rewrite指令
        執(zhí)行l(wèi)ocation匹配
        執(zhí)行選定的location中的rewrite指令

location優(yōu)先級(jí)的示例

##精確匹配/,主機(jī)名后面不能帶任何字符串
location = / {
[ configuration A ]     
}

##所有的地址都以/開(kāi)頭,這條規(guī)則將匹配到所有請(qǐng)求,但正則和最長(zhǎng)字符串會(huì)優(yōu)先匹配
location  / {
[ configuration B ]     
}

##匹配任何以/documents/開(kāi)頭的地址,當(dāng)后面正則表達(dá)式?jīng)]有匹配到時(shí),才起作用
location /documents/ {
[ configuration C ]
}

##匹配任何以/documents/abc開(kāi)頭的地址,當(dāng)后面正則表達(dá)式?jīng)]有匹配到時(shí),才會(huì)起作用
location ~ /documents/abc {
[ configuration D ]
}

##以/images/開(kāi)頭的地址,匹配符合后,停止往下匹配
location ^~ /images/ {
[ configuration E ]
}

##匹配所有以gif結(jié)尾的請(qǐng)求,/images/下的圖片會(huì)被[configuration E]處理,因?yàn)閊~的優(yōu)先級(jí)更高
location ~* \.(gif|jpg|jpeg)$ {
[ configuration F ]
}

##最長(zhǎng)字符匹配到/images/abc,優(yōu)先級(jí)最低
location /images/abc {
[ configuration G ]
}

##以/images/abc開(kāi)頭的,優(yōu)先級(jí)次之
location ~ /images/abc {
[ configuration H ]
}

##如果和正則~/images/abc/1.html相比,正則優(yōu)先級(jí)更高
location /images/abc/1.html {
[ configuration I ]
}

location優(yōu)先級(jí)規(guī)則

匹配某個(gè)具體文件:
(location = 完整路徑)>(location ^~完整路徑)>(location ~完整路徑)>(location ~完整路徑)>(location 完整路徑)>(location /)
用目錄做匹配訪問(wèn)某個(gè)文件:
(location = 目錄)>(location ^~目錄/)>(location ~ 目錄)>(location ~
 目錄)>(location 目錄)>(location /)

看完上述內(nèi)容,你們對(duì)Rewrite的跳轉(zhuǎn)原理和實(shí)現(xiàn)方法大概了解了嗎?如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!



向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI