超詳細的 NGINX URL重寫例項講解

2021-06-22 02:51:13 字數 3443 閱讀 6717

本文介紹nginx url重寫的相關知識,包括301重定向的內容等,希望對大家有所幫助。

nginx rewrite 實現二級網域名稱跳轉

當訪問跳轉到

方法一:

這種方法瀏覽器位址會變www.test.com/test/abc

實現訪問如下:

server 

}server

}

方法二、

當訪問跳轉到

server 

location /

rewrite ^/(.*) /test/$domain/$1 last;

}access_log off;

}

rewrite命令

nginx的rewrite相當於apache的rewriterule(大多數情況下可以把原有apache的rewrite規則加上引號就可以直接使用),它可以用在server,location 和if條件判斷塊中,命

令格式如下:

rewrite 正規表示式 替換目標 flag標記

flag標記可以用以下幾種格式:

last - 基本上都用這個flag。

break - 中止rewirte,不在繼續匹配

redirect - 返回臨時重定向的http狀態302

permanent - 返回永久重定向的http狀態301

例如下面這段設定nginx將某個目錄下面的檔案重定向到另乙個目錄,$2對應第二個括號(.*)中對應的字串:

location /download/

nginx重定向的if條件判斷

在server和location兩種情況下可以使用nginx的if條件判斷,條件可以為以下幾種:

正規表示式

如:匹配判斷

~ 為區分大小寫匹配; !~為區分大小寫不匹配

~* 為不區分大小寫匹配;!~為不區分大小寫不匹配

就是當使用者輸入 www.a.com.cn 自動跳轉到www.a.com 這個網域名稱:

rewrite ^/(.*)$ permanent; 或者cname

例如下面設定nginx在使用者使用ie的使用重定向到/nginx-ie目錄下:

檔案和目錄判斷

-f和!-f判斷是否存在檔案

-d和!-d判斷是否存在目錄

-e和!-e判斷是否存在檔案或目錄

-x和!-x判斷檔案是否可執行

例如下面設定nginx在檔案和目錄不存在的時候重定向:

if (!-e $request_filename)

return

返回http**,例如設定nginx防盜煉:

記一正則,匹配非某單詞

由於要rewrite乙個位址從

/mag/xx/***/ -> /m/***

但原先 /mag/xx/more/ 要保留

這就得寫乙個比較奇特的正則了,嘗試了比較多的寫法也沒成功

最先想到的是:

location ~* ^/mag/[^/]+/[^(more)]+/

的寫法並不湊效,裡面是匹配單個字元的,這樣無效,匹配不了

還是小范同學不錯,研究的深入,提供了非某單詞的寫法 (?!more)

location ~* ^/mag/[^/]+/(?!more)([^/]+)/

這個寫法勉強可以應付了,後面的匹配單元雖說還不完美,但也能夠對付我的所有需求內容了。

有需要的可以參考此寫法。

常用分組語法捕獲

(exp) 匹配exp,並捕獲文字到自動命名的組裡

(?exp) 匹配exp,並捕獲文字到名稱為name的組裡,也可以寫成(?'name'exp)

(?:exp) 匹配exp,不捕獲匹配的文字,也不給此分組分配組號

(?=exp) 匹配exp前面的位置

(?<=exp) 匹配exp後面的位置

(?!exp) 匹配後面跟的不是exp的位置

(?為何要使用301重定向

在**建設中需要網頁重定向的情況很多:如網頁目錄結構變動,網頁重新命名、網頁的副檔名改變、**網域名稱改變等。如果不做重 定向,使用者的收藏和搜尋引擎資料庫中的舊位址只能讓訪客得到乙個404錯誤資訊頁面,訪問流量白白喪失。不僅如此,之前該頁面的一切積累(比如pr值)就 都白費了。

301重定向不僅能使頁面實現自動跳轉,對於搜尋引擎來說,也可能可以傳遞pr值。

301重定向方法

進行了301重定向,把www .jefflei.com和jefflei.com合併,並把之前的網域名稱也一併合併. 有兩種實現方法,第一種方法是判斷nginx核心變數host(老版本是http_host):

server 

...}

第二種方法:

server

測試了第一種方法ok,這兩種方法中, permanent是關鍵,詳細說明見nginx重定向規則說明。

last – 基本上都用這個flag。

break – 中止rewirte,不在繼續匹配

redirect – 返回臨時重定向的http狀態302

permanent – 返回永久重定向的http狀態301

好了,現在可以檢查結果,這裡可以看返回的http頭資訊:

第二種方法沒有測試成功...

測試是否定向成功

輸入指令~

/usr/local/nginx/sbin/nginx -t

測試成功~ 重啟nginx~ 輸入指令~

/usr/local/nginx/sbin/nginx -s reload

重啟之後測試一下~是否成功設定完成! 輸入指令~

curl -i imcat.tk

會輸出:

超詳細的 NGINX URL重寫例項講解

nginx rewrite 實現二級網域名稱跳轉 當訪問跳轉到 方法一 這種方法瀏覽器位址會變www.test.com test abc 實現訪問如下 複製 如下 server server 方法二 當訪問跳轉到 複製 如下 server location rewrite test domain 1...

很不錯的NGINX URL重寫例項

本文介紹nginx url重寫的相關知識,包括301重定向的內容等,希望對大家有所幫助。nginx rewrite 實現二級網域名稱跳轉 當訪問跳轉到 方法一 這種方法瀏覽器位址會變www.jbxue.com test abc 實現訪問如下 複製 如下 server server 方法二 當訪問跳轉...

C 中方法的重寫(實現多型)

問題1 什麼時候要重寫方法?當子類繼承父類時,子類中方法名稱與父類中方法名稱重名時,需要對父類的方法使用virtual變成虛方法 使用關鍵字override重寫子類方法。問題2 什麼是重寫?重寫 父類方法就是修改它的實現方式或者說在子類中對它進行重新編寫。練習 static void main st...