nginx學習-ngx_http_rewrite_module模組

小宇渣渣渣發表於2019-02-24

return 指令

我們看官方手冊的說明:

Syntax:	return code [text];
return code URL;
return URL;
Default: —
Context: server, location, if
複製程式碼
location ~ (.*).js$ {
   return 500;  #返回500狀態碼
}

location ~ (.*).js$ {
   return 500 "error"; #返回500狀態碼 同時列印error
}

location ~ (.*).js$ {
   return 302 http://www.baidu.com; # 302狀態碼,跳轉到百度
}
複製程式碼

注意當使用 return url 指令操作的時候,只能使用302(臨時重定向) 301(永久重定向) 類似跳轉,而不能使用500或其他狀態碼。

rewrite 指令

rewrite 指令是一個常用的指令,根據訪問url定位真實地址

Syntax:	rewrite regex replacement [flag];
Default: —
Context: server, location, if
複製程式碼

下面表示當訪問地址以 .js 字尾開頭的時候

如果匹配正規表示式成功,就直接重寫到js目錄下。

location ~ (.*).js$ {
    rewrite (.*) /js/$1 break;
}
複製程式碼

注意這個js的目錄地址, 是相對於root指定的目錄為根目錄尋找的。 rewrite第三個引數為break,表示中斷,不再繼續向下執行.

rewrite第三個引數取值:

last
   使用了last 指令,rewrite 後會跳出location
break
   使用break直接終止繼續進行匹配
redirect
    表示302臨時重定向
permanent
    表示301永久重定向
複製程式碼

是否記錄 rewrite_log

Syntax:	rewrite_log on | off;
Default: rewrite_log off;
Context:http, server, location, if
複製程式碼

if條件判斷

Syntax:	if (condition) { ... }
Default: —
Context: server, location
複製程式碼

下面是一些常用的判斷示例

if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 break;
}

if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
    set $id $1;
}

if ($request_method = POST) {
    return 405;
}

if ($slow) {
    limit_rate 10k;
}

if ($invalid_referer) {
    return 403;
}

複製程式碼

相關文章