Nginx的rewrite 位址重定向 超細剖析

2021-10-10 08:40:29 字數 4591 閱讀 6211

url看起來更規範、合理

企業會將動態url位址偽裝成靜態位址提供服務

**換新網域名稱後,讓舊的訪問跳轉到新的網域名稱上

服務端某些業務調整

nginx跳轉需求的實現方式

使用rewrite進行匹配跳轉

使用if匹配全域性變數後跳轉

使用location匹配跳轉

rewrite放在server{},if{},location{}端中

location只對網域名稱後邊的除去傳遞引數外的字串起作用

對網域名稱或引數字串

使用if全域性變數匹配

使用proxy_pass反向**

常用的正規表示式元字元

字元說明

^匹配輸入字串的起始位置

$匹配輸入字串的結束位置

*匹配前面的字元零次或多次

+匹配前面的字元一次或多次

?匹配前面的字元零次或一次

.匹配除」\n」之外的任何單個字元

\將後面接著的字元標記為乙個特殊字元或乙個原義字元或乙個向後引用

\d匹配純數字

重複n次

重複n次或更多次

[c]匹配單個字元c

[a-z]

匹配a-z小寫字母的任意乙個

[a-za-z]

匹配a-z小寫字母或a-z大寫字母的任意乙個

1.rewrite命令語法

rewrite [flag];

:正規表示式

:跳轉後的內容

[flag]rewrite支援的flag標記

2.flag標記說明

標記說明

last

相當於apache的[l]標記,表示完成rewrite

break

本條規則匹配完成即終止,不再匹配後面的任何規則

redirect

返回302臨時重定向,瀏覽器位址會顯示跳轉後的url位址,爬蟲不會更新url

permanent

返回301永久重定向,瀏覽器位址會顯示跳轉後的url位址,爬蟲更新url

總結:last和break再重定向後,位址列都不會發生變化,這是他們的相同點,不同點在於last會寫在server和if中,break是寫在location中,last不會終止重寫後的url匹配,break會終止重寫後的url匹配

1.分類

location = patt{} [精準匹配]

location patt {} [一般匹配]

location ~ patt {} [正則匹配]

2.正則匹配的常用表示式

標記說明

~執行乙個正則匹配,區分大小寫

~*執行乙個正則匹配,不區分大小寫

!~執行乙個正則匹配,區分大小寫不匹配

!~*執行乙個正則匹配,不區分大小寫不匹配

^~普通字元匹配,使用字首匹配,如果匹配成功,則不再匹配其他location

=普通字元精確匹配,也就是完全匹配

@定義乙個命名的location,使用再內部定向時

3.location優先順序

相同型別的表示式,字串長的會優先匹配

按優先順序排列

= 型別

^~ 型別表示式

正規表示式(~和~*)型別

常規字串匹配型別,按字首匹配

通用匹配(/),如果沒有其他匹配,任何請求都會匹配到

location優先順序的示例

比較rewrite和location

相同點:

都能實現跳轉

不同點:

rewrite是在同一網域名稱內更改獲取資源的路徑

location是對一類路徑控制訪問或反向**,還可以proxy_pass到其他機器

rewrite會寫在location裡,執行順序

執行server塊裡面的rewrite指令

執行location匹配

執行選定的location中的rewrite指令

location優先順序規則

匹配某個具體檔案

(location = 完整路徑)>(location ^~ 完整路徑)>(location ~* 完整路徑)=(location ~ 完整路徑)>(location /)

用目錄做匹配訪問某個檔案

(location = 目錄)>(location ^~ 目錄)>(location ~* 目錄)=(location ~ 目錄)>(location /)

現在公司舊網域名稱www.old.com有業務需求有變更,需要使用新網域名稱www.new.com代替。

要求:舊網域名稱不能廢除,需要跳轉到新網域名稱上,而且後面的引數保持不變

實驗過程:

1.配置新舊網域名稱的dns

www.old.com 192.168.100.10

www.new.com 192.168.100.10

2.更改配置檔案內容,新增網域名稱跳轉,如果訪問www.old.com,則跳轉到www.new.com

vi /usr/local/nginx/conf/nginx.conf

server

root /usr/share/nginx/html;

index index.html index.htm;

}[root@localhost ~]# systemctl reload nginx.service

3.客戶端訪問www.old.com進行測試,會轉到www.new.com

vi /usr/local/nginx/conf/nginx.conf

server

#如果不是公司ip,加上字尾位址作為標識

if ($rewrite = true)

#精確匹配有/error.html字尾的網頁

location = /error.html

在/usr/share/nginx/html下建立error.html

192.168.100.11不通,訪問error.html檔案

192.168.100.10能訪問

要求:將網域名稱下面的發帖都跳轉到且網域名稱跳轉後保持引數不變

1.進入主配置檔案,寫入location配置段,先匹配/post再跳轉

vi /usr/local/nginx/conf/nginx.conf

server

2.在網頁站點/usr/share/nginx/html位置新建bbc目錄下post目錄下的abc.html網頁檔案,客戶端瀏覽器訪問bbc.old.com/post/abc.html

要求:現在訪問

跳轉到頁面。

1.在主配置檔案中加入內建變數request_uri的正則匹配。

vi /usr/local/nginx/conf/nginx.conf

server

[root@localhost named]# systemctl restart nginx

2.訪問www.test.com/100-100-10.html,會跳轉www.test.com

vi /usr/local/nginx/conf/nginx.conf

server

[root@localhost named]# systemctl restart nginx

2.客戶端訪問會跳轉www.test.com

要求:訪問乙個具體的頁面跳轉到首頁,如瀏覽器訪問/1/test.html跳轉到首頁。

1.使用正則匹配網頁站點中網域名稱後面是/1/html的**

vi /usr/local/nginx/conf/nginx.conf

server

[root@localhost named]# systemctl restart nginx

2.瀏覽器訪問/1/test.html,會跳轉www.test.co

Nginx的rewrite 位址重定向 剖析

指令語法 rewrite regex replacement flag 預設值 none 應用位置 server location if rewrite是實現url重定向的重要指令,他根據regex 正規表示式 來匹配內容跳轉到replacement,結尾是flag標記 簡單的小例子 常用正規表示式...

Nginx的Rewrite的配置

nginx的rewrite 經過網上查閱和測試,發現nginx的rewrite規則和apache的rewite規則差別不是很大,幾乎可以直接使用。比如在apache中這樣寫規則 1rewrite 0 9 html viewthread.php?tid 1 last 而在nginx中寫成這樣寫是無法啟...

Nginx基礎的Rewrite規則

rewrite是nginx乙個特別重要的指令,該指令可以使用正規表示式改寫uri。可以指定乙個或多個rewrite指令,按順序匹配 區分大小寫匹配 不區分大小寫匹配 和 區分大小寫不匹配及不區分大小寫不匹配 f和 f 判斷是否存在檔案 d和 d 判斷是否存在目錄 e和 e 判斷是否存在檔案或目錄 x...