Nginx Rewrite重寫規則

2021-08-29 07:13:21 字數 2276 閱讀 9128

rewrite 主要的功能就是實現url的重寫,nginx的rewrite功能是使用nginx提供的全域性變數或自己設定的變數,結合正規表示式和標誌位實現url重寫以及重定向。本文給大家講述實際專案中常用到的rewrite規則。

nginx的rewrite功能需要pcre軟體的支援,即通過perl相容正規表示式語句進行規則匹配的。預設引數編譯nginx就會支援rewrite的模組,但是也必須要pcre的支援,nginx的安裝可以檢視本站文章:centos7使用原始碼編譯安裝nginx。

rewrite是實現url重寫的關鍵指令,根據regex(正規表示式)部分內容,重定向到replacement,結尾是flag標記。

nginx rewrite指令執行順序

如果其中某步uri被重寫,則重新迴圈執行1-3,直到找到真實存在的檔案。

如果迴圈超過10次,則返回500 internal server error錯誤。

flag標誌位

rewrite的語法很簡單,如:

rewrite regex url [flag];
rewrite是關鍵字,regex是正規表示式,url是要替代的內容,[flag]是標記位的意思,它有以下幾種值:

因為301和302不能簡單的只返回狀態碼,還必須有重定向的url,這就是return指令無法返回301,302的原因了。這裡 last 和 break 區別有點難以理解:

來看乙個簡單例項:

第一條重寫規則中,我們可以使用友好的url:代替就相當於我們在瀏覽器的位址列中輸入後,實際訪問的url資源是

第二條規則中,對形如的檔案請求,重寫到位址,並會繼續嘗試匹配location。

if指令與全域性變數

if指令語法為if(condition),對給定的條件condition進行判斷。如果為真,大括號內的rewrite指令將被執行。

來看**規則:

if ($http_user_agent ~ msie)  //如果ua包含"msie",rewrite請求到/msid/目錄下

if ($http_cookie ~* "id=([^;]+)(?:;|$)") //如果cookie匹配正則,設定變數$id等於正則引用部分

if ($request_method = post) //如果提交方法為post,則返回狀態405(method not allowed)。return不能返回301,302

if ($slow) //限速,$slow可以通過 set 指令設定

if (!-f $request_filename) //如果請求的檔名不存在,則反向**到localhost 。這裡的break也是停止rewrite檢查

if ($args ~ post=140) //如果query string中包含"post=140",永久重定向到mysite.com

if指令中,可以使用全域性變數,這些變數有:

使用return跳轉

rewrite ^ $scheme: permanent;
當訪問任意url都會301永久定向到www.mysite.com的url上。這個寫法沒錯,但是因為使用了rewrite的正則匹配,會損耗一部分資源,nginx官網不推薦這樣寫。我們可以使用return同樣可以實現301跳轉,簡單實用,看例項:

301永久定向到新網域名稱

server

以上**實現了老網域名稱301跳轉到新網域名稱上,假如**要更換新網域名稱的話使用此方法做301跳轉。

不帶www的網域名稱301跳轉到帶www的網域名稱

server

http站點301跳轉到https站點

server

以上就是有關nginx的rewrite重寫與重定向的介紹,覺得有用就請練習多遍,收藏好此文不迷路。

nginx rewrite 重寫規則

1注意點 在重寫的時候,一定要注意,if 和後面的括號是要有乙個空格的 if host com 2.在重寫的時候,需要使用正規表示式 host 代表網域名稱,首先判斷網域名稱,來看這個正則 rewrite de permanent 代表網域名稱下面的 com de 這個路徑下面的,重寫為 其中 1代...

Nginx Rewrite重寫技術

permanent last 相當於apache裡的 l 標記,表示完成rewrite break 本條規則匹配完成後,終止匹配,不再匹配後面的規則 redirect 返回302臨時重定向,瀏覽器位址會顯示跳轉後的url位址 permanent 返回301永久重定向,瀏覽器位址會顯示跳轉後url位址...

Nginx Rewrite位址重寫

1 什麼是rewrite rewrite對稱url rewrite,即url重寫,就是把傳入web的請求重定向到其他url的過程。從安全角度上講,如果在url中暴露太多的引數,無疑會造成一定量的資訊洩漏,可能會被一些黑客 利用,對你的系統造成一定的破壞,所以靜態化的url位址可以給我們帶來更高的安全...