if指令
格式:if (條件判斷) { 具體的rewrite規則 }
一、if語句中的判斷條件(nginx)
1、正則表達式匹配:
==:等值比較;
~:與指定正則表達式模式匹配時返回“真”,判斷匹配與否時區分字符大小寫;
~*:與指定正則表達式模式匹配時返回“真”,判斷匹配與否時不區分字符大小寫;
!~:與指定正則表達式模式不匹配時返回“真”,判斷匹配與否時區分字符大小寫;
!~*:與指定正則表達式模式不匹配時返回“真”,判斷匹配與否時不區分字符大小寫;
2、文件及目錄匹配判斷:
-f, !-f:判斷指定的路徑是否爲存在且爲文件;
-d, !-d:判斷指定的路徑是否爲存在且爲目錄;
-e, !-e:判斷指定的路徑是否存在,文件或目錄均可;
-x, !-x:判斷指定路徑的文件是否存在且可執行;
示例1
if ($request_method = POST) //當請求的方法爲POST時,直接返回405狀態碼
{
return 405; //在該示例中並未用到rewrite規則,if中支持用return指令。
}
示例2
if ($http_user_agent ~ MSIE) //user_agent帶有MSIE字符的請求,直接返回403狀態碼
{
return 403;
}
如果想同時限制多個user_agent,還可以寫成這樣
if ($http_user_agent ~ "MSIE|firefox|spider")
{
return 403;
}
示例3
if(!-f $request_filename) //當請求的文件不存在,將會執行下面的rewrite規則
{
rewrite 語句;
}
示例4
if($request_uri ~* 'gid=\d{9,12}/') //\d表示數字,{9,12}表示數字出現的次數是9到12次,如gid=123456789/就是符合條件的。
{
rewrite 語句;
}
示例5
if (!-f $request_filename) {
return 414;
}