當rewrite的重寫規則滿足不了需求時,比如需要判斷當檔案不存在時、當路徑包含xx時等條件,則需要用到if
if (表示式)
表示式語法:
當表示式只是乙個變數時,如果值為空或任何以0開頭的字串都會當做false
直接比較變數和內容時,使用=或!=
-f和!-f用來判斷是否存在檔案
-d和!-d用來判斷是否存在目錄
-e和!-e用來判斷是否存在檔案或目錄
-x和!-x用來判斷檔案是否可執行
為了配置if的條件判斷,這裡需要用到nginx中內建的全域性變數
$args 這個變數等於請求行中的引數,同$query_string
$content_length 請求頭中的content-length欄位。
$content_type 請求頭中的content-type欄位。
$document_root 當前請求在root指令中指定的值。
$host 請求主機頭欄位,否則為伺服器名稱。
$http_user_agent 客戶端agent資訊
$http_cookie 客戶端cookie資訊
$limit_rate 這個變數可以限制連線速率。
$request_method 客戶端請求的動作,通常為get或post。
$remote_addr 客戶端的ip位址。
$remote_port 客戶端的埠。
$remote_user 已經經過auth basic module驗證的使用者名稱。
$request_filename 當前請求的檔案路徑,由root或alias指令與uri請求生成。
$scheme http方法(如http,https)。
$server_protocol 請求使用的協議,通常是http/1.0或http/1.1。
$server_addr 伺服器位址,在完成一次系統呼叫後可以確定這個值。
$server_name 伺服器名稱。
$server_port 請求到達伺服器的埠號。
$request_uri 包含請求引數的原始uri,不包含主機名,如:」/foo/bar.php?arg=baz」。
$uri 不帶請求引數的當前uri,$uri不包含主機名,如」/foo/bar.html」。
$document_uri 與$uri相同。
1、如果檔案不存在則返回400
if (!-f $request_filename)
2、如果host不是jouypub.com,則301到jouypub.com中
if ( $host != 'jouypub.com' )
3、如果請求型別不是post則返回405
if ($request_method = post)
4、如果引數中有a=1
則301到指定網域名稱
if ($args ~ a=1)
5、在某種場景下可結合location規則來使用,如:
# 訪問 /test.html 時
location = /test.html
# 301
rewrite ^ /$name.html permanent;
}
上面表示:
/test.html => /xiaowu.html
/test.html?name=ok => /ok.html?name=ok
Nginx 中的配置命令
二 nginx rewrite 開頭表示精確匹配 開頭表示uri以某個常規字串開頭,不是正則匹配 開頭表示區分大小寫的正則匹配 開頭表示不區分大小寫的正則匹配 通用匹配,如果沒有其它匹配,任何請求都會匹配到 精確匹配,後面不能帶任何字元 server 匹配所有以 開頭請求 server 以開頭 ha...
Nginx中if語句中的判斷條件
一 if語句中的判斷條件 nginx 1 正規表示式匹配 等值比較 與指定正規表示式模式匹配時返回 真 判斷匹配與否時區分字元大小寫 與指定正規表示式模式匹配時返回 真 判斷匹配與否時不區分字元大小寫 與指定正規表示式模式不匹配時返回 真 判斷匹配與否時區分字元大小寫 與指定正規表示式模式不匹配時返...
Nginx中if語句中的判斷條件
一 if語句中的判斷條件 nginx 1 正規表示式匹配 等值比較 與指定正規表示式模式匹配時返回 真 判斷匹配與否時區分字元大小寫 與指定正規表示式模式匹配時返回 真 判斷匹配與否時不區分字元大小寫 與指定正規表示式模式不匹配時返回 真 判斷匹配與否時區分字元大小寫 與指定正規表示式模式不匹配時返...