該ngx_http_rewrite_module模塊用於使用PCRE正則表達式更改請求URI,返回重定向,以及有條件地選擇配置。rewrite指令的功能就是,使用nginx提供的全局變量或本身設置的變量,而後結合正則表達式和標誌位實現url重寫以及重定向。
所以須要檢查pcre是否安裝 php
[root@]# rpm -q pcre pcre-8.32-17.el7.x86_64
語法 | break; |
---|---|
默認 | - |
應用位置 | server,location,if |
中止處理任何rewrite的相關指令。若是出如今location裏面,那麼全部後面的rewrite模塊指令都不會再執行,也不發起內部重定向,而是直接用新的URI進一步處理請求。html
location = /testbreak { break; return 200 $request_uri; }
當uri中包含testbreak時,那麼會中止執行後面的rewrite模塊的命令,return屬於rewrite模塊。nginx
語法 | if (condition) { ... } |
---|---|
默認 | - |
應用位置 | server,location |
if ($request_method = POST ) { return 405; } if ( !-f $filename ) { break; }
中止處理併爲客戶端返回狀態碼,沒有狀態碼的URL將被視爲一個302狀態碼。
return語法正則表達式
語法 | return code [text];return code URL;return URL; |
---|---|
默認 | - |
應用位置 | server,location |
# return code [text]; location = /1 { return 200 "this is 1"; } # return code URL; location = / { return 302 http://www.wanger.com; } # return URL; location = / { return http://www.wanger.com; }
語法 | rewrite regex replacement [flag]; |
---|---|
默認 | - |
應用位置 | server,location,if |
rewrite ^(.*) http://wanger.com/$1 permanent;
若是()裏的正則表達式與請求的URI匹配,那麼URI將根據replacement字符串中的指定進行更改,匹配成功將跳轉到http://wanger.com/$1 ,$1的值是前面()裏的正則匹配到的值,然後面的permanent是永久重定向301的標誌,當rewrite 後面沒有任何 flag 時就順序執行 json
flag標記 | 說明 |
---|---|
last | 本條規則匹配完成後繼續匹配新的URI規則 |
break | 本條規則匹配完成後不在進行新的URI匹配 |
redirect | 302臨時重定向,瀏覽器會顯示跳轉後的URL地址,當nginx 服務關閉的時候,將沒法定向到特定的網站 |
permanent | 301永久重定向,瀏覽器會顯示跳轉後的URL地址,除非客戶端清理瀏覽器緩存 |
last 和 break同樣 它們都會終止此 location 中其餘它rewrite模塊指令的執行,last會從新將rewrite後的地址做爲一個新的URI在server塊中請求,而break會直接請求重寫後的地址,並不會再進行新的請求瀏覽器
location ~ ^/break { rewrite ^/break /test/ break; } location ~ ^/last { rewrite ^/last /test/ last; } location /test/ { default_type application/json; return 200 '{"status":"success"}'; }
當我請求127.0.0.1/break時,瀏覽器返回的是404,由於break不會去請求/test/塊,而網站根目錄下test目錄根本不存在,當我請求127.0.0.1/last時,瀏覽器返回的是{"status":"success"},由於last將地址重寫後生成了新的請求,新的請求地址爲/test/,而後與/test/塊進行匹配,返回200狀態碼以及{"status":"success"}緩存
用於定義一個變量,變量的值能夠包含文本,變量或者是它們的組合形式。安全
語法 | set $variable value; |
---|---|
默認 | - |
應用位置 | server,location,if |
location /wanger { # return 302 http://60.205.177.168/huazai; root html; index index.html; set $var1 "client address is "; set $var2 $remote_addr; return 200 "$var1$var2"; }
curl 127.0.0.1/wanger client address is 127.0.0.1
if ($host = "wanger.com"){ rewrite ^/(.*)$ http://www.wanger.com/$1 permanent; } if (!-f $request_filename) { rewrite ^/(.*) http://www.wanger.com/index.html; } if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?$1 last; }
歡×××陳師傅」
app