URL看起來更規範,合理 企業會將動態URL地址假裝成靜態地址提供服務 網址換新域名後,讓舊的訪問跳轉到新的域名上 服務端某些業務調整
- Nginx跳轉需求的實現方式
使用rewrite進行匹配跳轉
使用if匹配全局變量後跳轉
使用location匹配再跳轉- rewrite放在server{},if{},location{}段中
- 對域名或參數字符串
使用if全局變量匹配
使用proxy_pass反向代理
字符 | 說明 |
---|---|
^ | 匹配輸入字符串的起始位置 |
$ | 匹配輸入字符串的結束位置 |
* | 匹配前面的字符零次或屢次 |
+ | 匹配前面的字符一次或屢次 |
? | 匹配前面的字符零次或一次 |
. | 匹配除\n以外的任何單個字符,使用諸如"[.\n]"之類的模式,可匹配包括"\n"在內的任意字符 |
\d | 匹配純數字 [0-9] |
{n} | 重複屢次 |
{n,} | 重複n次或更屢次 |
[c] | 匹配單個字符c |
[a-z] | 匹配a-z小寫字母的任意一個 |
[a-zA-Z] | 匹配a-z小寫字母或A-Z大寫字母的任意一個 |
語法: rewrite <regex> <replacement> [flag]; 正則 跳轉後的內容 rewrite支持的flag標記
flag標記說明:html
標記 | 說明 |
---|---|
last | 至關於Apache的[L]標記,表示完成rewrite |
break | 本條規則匹配完成即終止,再也不匹配後面的任何規則 |
redirect | 返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址,爬蟲不會更新url |
permanent | 返回301永久重定向,瀏覽器地址欄會顯示跳轉後的URL地址,爬蟲更新url |
last和break比較:正則表達式
last | break | |
---|---|---|
使用場景 | 通常寫在server和if中 | 通常使用在location中 |
URL匹配 | 不終止重寫後的url匹配 | 終止重寫後的url匹配 |
分類: location = patt {} [精準匹配] location patt {} [通常匹配] location ~ patt {} [正則匹配]
正則匹配的經常使用表達式:瀏覽器
標記 | 說明 |
---|---|
~ | 執行一個正則匹配,區分大小寫 |
~* | 執行一個正則匹配,不區分大小寫 |
!~ | 執行一個正則匹配,區分大小寫不匹配 |
!~* | 執行一個正則匹配,不區分大小寫不匹配 |
^~ | 普通字符匹配;使用前綴匹配。若是匹配成功,則再也不匹配其餘location |
= | 普通字符精準匹配。也就是徹底匹配 |
@ | 定義一個命名的location,使用在內部定向時 |
**相同類型的表達式,字符創長的會優先匹配** **按優先級排列** = 類型 ^~ 類型表達式 正則表達式(~和~*)類型 常規字符串匹配類型,按前綴匹配 一般匹配(/),若是沒有其餘匹配,任何請求都會匹配到
**相同點** 都能實現跳轉 **不一樣點** rewrite是在同一域名內更改獲取資源的路徑 location是對一類路徑作控制訪問或方向代理,還能夠proxy_pass到其餘機器 **rewrite會寫在location裏執行順序** 執行server塊裏面的rewrite指令 執行location匹配 執行選定的location中的rewrite指令
##精確匹配/,主機名後面不能帶任何字符串 location = / { [ configuration A ] } ##全部的地址都以/開頭,這條規則將匹配到全部請求,但正則和最長字符串會優先匹配 location / { [ configuration B ] } ##匹配任何以/documents/開頭的地址,當後面正則表達式沒有匹配到時,才起做用 location /documents/ { [ configuration C ] } ##匹配任何以/documents/abc開頭的地址,當後面正則表達式沒有匹配到時,纔會起做用 location ~ /documents/abc { [ configuration D ] } ##以/images/開頭的地址,匹配符合後,中止往下匹配 location ^~ /images/ { [ configuration E ] } ##匹配全部以gif結尾的請求,/images/下的圖片會被[configuration E]處理,由於^~的優先級更高 location ~* \.(gif|jpg|jpeg)$ { [ configuration F ] } ##最長字符匹配到/images/abc,優先級最低 location /images/abc { [ configuration G ] } ##以/images/abc開頭的,優先級次之 location ~ /images/abc { [ configuration H ] } ##若是和正則~/images/abc/1.html相比,正則優先級更高 location /images/abc/1.html { [ configuration I ] }
匹配某個具體文件:
(location = 完整路徑)>(location ^~完整路徑)>(location ~完整路徑)>(location ~完整路徑)>(location 完整路徑)>(location /)
用目錄作匹配訪問某個文件:
(location = 目錄)>(location ^~目錄/)>(location ~ 目錄)>(location ~ 目錄)>(location 目錄)>(location /)ide