Nginx URL重寫規則配置詳解

2021-09-12 21:33:04 字數 3090 閱讀 5962

rewrite模組介紹

nginx的重寫模組是乙個簡單的正規表示式匹配與乙個虛擬堆疊機結合。依賴於pcre庫,因此需要安裝pcre。根據相關變數重定向和選擇不同的配置,從乙個location跳轉到另乙個location,不過這樣的迴圈最多可以執行10次,超過後nginx將返回500錯誤。同時,重寫模組包含set指令,來建立新的變數並設其值,這在有些情景下非常有用的,如記錄條件標識、傳遞引數到其他location、記錄做了什麼等等。

rewrite模組指令

break

語法:break

預設值:none

使用字段:server, location, if

作用:完成當前設定的重寫規則,停止執行其他的重寫規則。

if

語法:if (condition) 

預設值:none

使用字段:server, location

注意:盡量考慮使用trp_files代替。

判斷的條件可以有以下值:

乙個變數的名稱:空字元傳」「或者一些「0」開始的字串為false。

字串比較:使用=或!=運算子

正規表示式匹配:使用~(區分大小寫)和~(不區分大小寫),取反運算!~ 和!~。

檔案是否存在:使用-f和!-f操作符

目錄是否存在:使用-d和!-d操作符

檔案是否可執行:使用-x和!-x操作符

return

語法:return code

預設值:none

使用字段:server, location, if

停止處理並為客戶端返回狀態碼。非標準的444狀態碼將關閉連線,不傳送任何響應頭。可以使用的狀態碼有:204,400,402-406,408,410, 411, 413, 416與500-504。如果狀態碼附帶文字段落,該文字將被放置在響應主體。相反,如果狀態碼後面是乙個url,該url將成為location頭補值。沒有狀態碼的url將被視為乙個302狀態碼。

rewrite

語法:rewrite regex replacement flag

預設值:none

使用字段:server, location, if

按照相關的正規表示式與字串修改uri,指令按照在配置檔案**現的順序執行。可以在重寫指令後面新增標記。

注意:如果替換的字串以http://開頭,請求將被重定向,並且不再執行多餘的rewrite指令。

尾部的標記(flag)可以是以下的值:

last – 停止處理重寫模組指令,之後搜尋location與更改後的uri匹配。

break – 完成重寫指令。

redirect – 返回302臨時重定向,如果替換欄位用http://開頭則被使用。

permanent – 返回301永久重定向。

rewrite_log

語法:rewrite_log on | off

預設值:rewrite_log off

使用字段:server, location, if

變數:無

啟用時將在error log中記錄notice級別的重寫日誌。

set

語法:set variable value

預設值:none

使用字段:server, location, if

為給定的變數設定乙個特定值。

uninitialized_variable_warn

語法:uninitialized_variable_warn on|off

預設值:uninitialized_variable_warn on

使用字段:http, server, location, if

控制是否記錄未初始化變數的警告資訊。

重寫規則組成部分

第一部分–正規表示式

可以使用括號來捕獲,後續可以根據位置來將其引用,位置變數值取決於捕獲正規表示式中的順序,$1引用第乙個括號中的值,$2引用第二個括號中的值,以此類推。如:

# $1是兩個小寫字母組成的字串

# $2是由小寫字母和0到9的數字組成的5個字元的字串

# $3將是個檔名

# $4是png、jpg、gif中的其中乙個。第二部分–uri

請求被改寫。該uri可能包含正規表示式中的捕獲的位置引數或這個級別下的nginx任何配置變數。如:

/data?file=$3.$4
如果這個uri不匹配nginx配置的任何location,那麼將給客戶端返回301(永久重定向)或302(臨時重定向)的狀態碼來表示重定向型別。該狀態碼可以通過第三個引數來明確指定。

第三部分–標記

第三部分也就是尾部的標記(flag)。 last標記將導致重寫後的uri搜尋匹配nginx的其他location,最多可迴圈10次。如:

rewrite '^/images/([a-z])/([a-z0-9])/(.*)\.(png|jpg|gif)$' /data?file=$3.$4 last;
break指令可以當做自身指令。如:

if ($bwhog)
例項

# 注意不能在上面這條規則後面加上「last」引數,否則下面的set指令不會執行

set $image_file $3;

set $image_type $4;

}location /data

location = /image404.html

}

nginx URL重寫rewrite規則

語法 rewrite regex replacement flag 如 此處的 1用於引用 jpg 匹配到的內容,又如 rewrite bbs redirect 如上例所示,replacement可以是某個路徑,也可以是某個url 常見的flag flag 作用last 基本上都用這個flag,表示...

nginx URL 重寫if規則和nginx變數

url重寫 rewrite if指令 if condition 代表條件為真時的nginx操作 condition條件的寫法 1 變數名 如果變數的值為空,或者為以 0 開頭的任意字串,條件為假,其他則為真 if slow 2 使用 或者 比較變數的值 if request method post ...

nginx重寫規則配置

乙個示例 location location 順序 no優先順序 location location 完整路徑 location 路徑 location 正則順序 location 部分起始路徑 上面的匹配結果 按照上面的location寫法,以下的匹配示例成立 所以實際使用中,個人覺得至少有三個匹...