Nginx location匹配及Rewrite重寫

chw_throx發表於2022-03-09




(1)location = / {}

=為精確匹配 / ,主機名後面不能帶任何字串,比如訪問 / 和 /data,則 / 匹配,/data 不匹配

再比如 location = /abc,則只匹配/abc ,/abc/或 /abcd不匹配。若 location  /abc,則即匹配/abc 、/abcd/ 同時也匹配 /abc/。


(2)location / {}

因為所有的地址都以 / 開頭,所以這條規則將匹配到所有請求 比如訪問 / 和 /data, 則 / 匹配, /data 也匹配,

但若後面是正規表示式會和最長字串優先匹配(最長匹配)


(3)location /documents/ {}

匹配任何以 /documents/ 開頭的地址,匹配符合以後,還要繼續往下搜尋其它 location

只有其它 location後面的正規表示式沒有匹配到時,才會採用這一條


(4)location /documents/abc {}

匹配任何以 /documents/abc 開頭的地址,匹配符合以後,還要繼續往下搜尋其它 location

只有其它 location後面的正規表示式沒有匹配到時,才會採用這一條


(5)location ^~ /images/ {}

匹配任何以 /images/ 開頭的地址,匹配符合以後,停止往下搜尋正則,採用這一條


(6)location ~* \.(gif|jpg|jpeg)$ {}

匹配所有以 gif、jpg或jpeg 結尾的請求

然而,所有請求 /images/ 下的圖片會被 location ^~ /images/ 處理,因為 ^~ 的優先順序更高,所以到達不了這一條正則


(7)location /images/abc {}

最長字元匹配到 /images/abc,優先順序最低,繼續往下搜尋其它 location,會發現 ^~ 和 ~ 存在


(8)location ~ /images/abc {}

匹配以/images/abc 開頭的,優先順序次之,只有去掉 location ^~ /images/ 才會採用這一條


(9)location /images/abc/1.html {}

匹配/images/abc/1.html 檔案,如果和正則 ~ /images/abc/1.html 相比,正則優先順序更高


三、rewrite

Ⅰ、介紹

rewrite功能就是,使用nginx提供的全域性變數或自己設定的變數,結合正規表示式和標記位實現URL重寫以及重定向。

比如:更換域名後需要保持舊的域名能跳轉到新的域名上、某網頁發生改變需要跳轉到新的頁面、網站防盜鏈等等需求。

rewrite只能放在server{ ) ,location } ,if{ }中,並且預設只能對域名後邊的除去傳遞的引數外的字串起作用,

例如http:// www . kac.com/abc/bbs/index.php?a=1&b=2只對/abc/bbs/index.php重寫。


Ⅱ、rewrite跳轉場景

調整使用者瀏覽的URL,看起來更規範,合乎開發及產品人員的需求。

為了讓搜尋引擎搜錄網站內容及使用者體驗更好,企業會將動態URL地址偽裝成靜態地址提供服務。

網址換新域名後,讓舊的訪問跳轉到新的域名上。例如,訪問京東的360buy.com 會跳轉到 jd.com。

服務端某些業務調整,比如根據特殊變數、目錄、客戶端的資訊進行URL調整等。

Ⅲ、跳轉實現



Nginx:透過ngx _http_rewrite_module模組支援URL重寫、支援if條件判斷,但不支援else

跳轉:從一個location跳轉到另一個location,迴圈最多可以執行10次,超過後nginx將返回500錯誤

PCRE支援: perl相容正規表示式的語法規則匹配

重寫模組set指令:建立新的變數並設其值

Ⅳ、執行順序

執行server塊裡面的rewrite指令。

執行location匹配。

執行選定的location中的rewrite指令。

格式:

rewrite <regex> <replacement> [ flag] ;

#regex :表示正則匹配規則。   #replacement :表示跳轉後的內容。     #flag :表示rewrite支援的flag標記。

1.

2.

3.

flag標記說明 作用

last 本條規則匹配完成後,繼續向下匹配新的location URI規則,一般用在 server 和 if 中。

break 本條規則匹配完成即終止,不再匹配後面的任何規則,一般使用在 location 中

redirect 返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址

permanent 返回301永久重定向,瀏覽器位址列會顯示跳轉後的URL地址

Ⅴ、實際場景

基於域名跳轉


現在公司舊域名有業務需求變更,需要使用新域名代替,但是舊域名不能廢除,需要跳轉新域名上,而且後面的引數保持不變。


vim /usr/local/nginx/conf/nginx.conf

server {

listen       80;

server_name  ; #域名修改

charset utf-8;

access_log  /var/log/nginx/.access.log; #日誌修改

location / {

#新增域名重定向

        if ($host = ''){             #$host為rewrite全域性變數,代表請求主機頭欄位或主機名

rewrite ^/(.*)$ http:///$1 permanent; #$1為正則匹配的內容,即域名後邊的字串

        }

        root   html;

        index  index.html index.htm;

    }

}

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

mkdir -p /var/log/ngin   #巢狀建立nginx目錄

systemctl restart nginx.service

echo "192.168.239.10 " >> /etc/hosts

systemctl restart nginx.service   #重啟nginx服務

1.

2.

3.

4.

基於客戶端IP訪問跳轉


今天公司業務新版本上線,要求所有IP訪問任何內容都顯示一個固定維護頁面,只有IP:192.168.239.10訪問正常


vim /usr/local/nginx/conf/nginx.conf

server {

listen       80;

server_name  ; #域名修改

charset utf-8;

access_log  /var/log/nginx/-access.log  main; #日誌修改


#設定是否合法的IP標記

    set $rewrite true; #設定變數$rewrite,變數值為boole值true

    #判斷是否為合法IP

if ($remote_addr = "192.168.184.10"){ #當客戶端IP為192.168.184.10時,將變數值設為false,不進行重寫

        set $rewrite false;

    }

#除了合法IP,其它都是非法IP,進行重寫跳轉維護頁面

    if ($rewrite = true){ #當變數值為true時,進行重寫

        rewrite (.+) /weihu.html; #重寫在訪問IP後邊插入/weihu.html,例如192.168.184.11/weihu.html

    }

    location = /weihu.html {

        root /var/www/html; #網頁返回/var/www/html/weihu.html的內容

    }

location / {

        root   html;

        index  index.html index.htm;




Nginx中location匹配及rewrite重寫

目錄一、常用的Nginx正規表示式二、location2.1、location三類匹配型別2.2、常用的匹配規則2.3、location優先順序2.3.1、舉例說明2.4、實際網站使用中,至少有三個匹配規則定義2.4.1、第一個必選規則2.4.2...



Nginx的location匹配與rewrite重寫跳轉

# Nginx的location匹配與rewrite重寫跳轉## 常用的Nginx正規表示式| 正規表示式 | 介紹 || :---------: | :--------------------------------------...


nginx location匹配及rewrite規則

location匹配規則1. 例項 server{ location = \ { [配置A] } location / { [配置B] } location = /images/ { [配置C] } location ^~ /static/{ ...



Nginx中的location匹配與rewrite重寫跳轉(八)

# 常見的Nginx正規表示式~~~^ :匹配輸入字串的起始位置$ :匹配輸入字串的結束位置* :匹配前面的字元零次或多次。如“ol*”能匹配“o”及“ol”、“oll”+ :匹配前面的字元一次或多次。如“ol+”能匹配...



Web之Nginx中的location匹配與rewrite重寫跳轉

@[toc](目錄## 一、常見的Nginx正規表示式- 正則之前的部落格中也有寫到,這裡在提一下,很重要。```^ :匹配輸入字串的起始位置$ :匹配輸入字串的結束位置* :匹配前面的字元零次或多次。如“ol*”能匹配...


web服務之Nginx中的location匹配與rewrite重寫跳轉

# 一、常見的Nginx正規表示式- 正則之前的部落格中也有寫到,這裡在提一下,很重要。```shell^ :匹配輸入字串的起始位置$ :匹配輸入字串的結束位置* :匹配前面的字元零次或多次。如“ol*”能匹配“o”及...


Nginx Rewrite跳轉與Location匹配規則

常用的Nginx正規表示式字元涵義以及示例^ 匹配輸入字串的起始位置$ 匹配輸入字串的結束位置* 匹配前面的字元零次或多次;如“ol*”能匹配“o”及“ol”、“oll”+匹配前面的字元一次或多次;如“o...



Nginx Rewrite 與 Location 的網頁匹配

# Nginx Rewrite 與 Location 的網頁匹配## 1、常見的Nginx正規表示式```^ :匹配輸入字串的起始位置$ :匹配輸入字串的結束位置* :匹配前面的字元零次或多次。如“ol*”能匹配“o”及“ol”、“oll”+...


Nginx自學手冊(三)location匹配,rewrite

   (一)Nginx location(一)Nginx Location location語法規則Syntax:location [ = | ~ | ~* | ^~ ] uri { ... }location @name&nbs...



Nginx之正規表示式、location匹配簡介以及rewrite重寫

一、常見的Nginx正規表示式^ :匹配輸入字串的起始位置$ :匹配輸入字串的結束位置* :匹配前面的字元零次或多次。如“ol*”能匹配“o”及“ol”、“oll”+ :匹配前面的字元一次或多次。如“ol+”能匹配...


Nginx Location配置總結及rewrite

 參考來源: http://blog.zol.com.cn/1067/article_1066186.html,http://flandycheng.blog.51cto.com/855176/280121語法規則: location [=|~|~*|^~] /uri/ { … }= 開頭表示精確匹配^~ ...


nginx 重寫 rewrite 基礎及例項

nginx rewrite 正規表示式匹配大小寫匹配~ 為區分大小寫匹配 ~* 為不區分大小寫匹配 !~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配 檔案及目錄匹配-f和!-f用來判斷是否存在檔案 -d和!-d用...



Nginx Rewrite(重寫)

# Nginx Rewrite(重寫)```==常用的Nginx正規表示式==^:匹配輸入字串的起始位置$:匹配輸入字串的結束位置*:匹配前面的字元零次或多次。如“o1*" 能匹配"o”及“ol”、“oll”+ :匹配前面的字元一次或多...



Nginx Rewrite(重寫)

1.常用的Nginx正規表示式^ : 匹配輸入字串的起始位置$ : 匹配輸入,字串的結束位置* : 匹配前面的字元零次或多次。如“o1*” 能匹配“o”及“ol”、“oll”+ : 匹配前面的字元一次或多次。如“o1+" 能匹配“ol"...



基於Nginx Rewrite 與 Location 的網頁匹配 跳轉

一、常用的Nginx 正規表示式字元涵義以及示例^ 匹配輸入字串的起始位置$ 匹配輸入字串的結束位置* 匹配前面的字元零次或多次;如“ol*”能匹配“o”及“ol”、“oll”+匹配前面的字元一次或多次;...


nginx配置 location及rewrite規則詳解

location正則寫法語法規則:location [=|~|~*|^~] /uri/ { … }=    開頭表示精確匹配^~  開頭表示uri以某個常規字串開頭,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為/static/20%/aa,可以...


Nginx Rewrite與Location

Nginx Rewrite與Location一、常用的Nginx正規表示式1、正則表達^∶匹配輸入字串的起始位置$ ∶匹配輸入字串的結束位置*∶匹配前面的字元零次或多次。如"ol*"能匹配"o"及"ol"、"oll"+ ∶匹配前面的字元一...


Nginx location&rewrite

Nginx的Location可以有以下幾個匹配:1. =   嚴格匹配這個查詢。如果找到,停止搜尋。 2. ^~ 匹配路徑的字首,如果找到,停止搜尋。3. ~   為區分大小寫的正則匹配   4. ~* 為不區分...


nginx 重寫 rewrite 基礎及例項(轉)

nginx rewrite 正規表示式匹配大小寫匹配~ 為區分大小寫匹配 ~* 為不區分大小寫匹配 !~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配 檔案及目錄匹配-f和!-f用來判斷是否存在檔案 -d和!-d用來判斷是否存在目...



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22198239/viewspace-2868738/,如需轉載,請註明出處,否則將追究法律責任。

相關文章