rewrite指令來源于模塊ngx_http_rewrite_module
用于使用PCRE正則表達(dá)式更改請求URI,返回重定url
Rewrite是由pcre模塊提供功能,提供偽靜態(tài)等功能。
rewrite 存在于if,location,server標(biāo)簽中
在server塊下,會優(yōu)先執(zhí)行rewrite部分,然后才會去匹配location塊
rewrite指令:
last:本條規(guī)則匹配完畢后繼續(xù)匹配之后的location url,最多循環(huán)10次。
break:本條規(guī)則匹配完成即終止,不再匹配后面的任何規(guī)則。
permanent:返回302臨時重定向,瀏覽器地址會顯示跳轉(zhuǎn)后的URL地址。
redirect:返回301永久重定向,瀏覽器地址欄會顯示跳轉(zhuǎn)后的URL地址。
例如域名跳轉(zhuǎn):
server {
listen 80;
server_name abc.com;
rewrite ^/(.*) http://www.def.com/$1 permanent;
}
server {
listen 80;
location / {
root /www/;
index index.html;
}
error_log logs/error_www.abc.com.log error;
access_log logs/access_www.abc.com.log main;
}
文件不存在時候重定向
if (!-e $request_filename) {
rewrite ^/(.*) http://www.def.com/ permanent
}
根據(jù)agent重定向目錄其他目錄
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /nginx-ie/$1 break;
}
改寫URL內(nèi)容
/23423/xxx ---- /xxx?id=23423
rewrite ^/(/d+)/(.+)/ /$2?id=$1 last;
防盜鏈
valid_referers [none|blocked|server_names|string]
該指令會根據(jù)Referer Header頭的內(nèi)容分配一個值為0或1給變量$invalid_referer。如果Referer Header頭不符合valid_referers指令設(shè)置的有效Referer,變量$invalid_referer
將被設(shè)置為1.
該指令的參數(shù)可以為下面的內(nèi)容:
none:表示無Referer值的情況。
blocked:表示Referer值被防火墻進(jìn)行偽裝。
server_names:來源頭部包含當(dāng)前的server_names(當(dāng)前域名)
string:
arbitrary string
任意字符串,定義服務(wù)器名或者可選的URI前綴.主機(jī)名可以使用*開頭或者結(jié)尾,在檢測來源頭部這個過程中,來源域名中的主機(jī)端口將會被忽略掉
regular expression
正則表達(dá)式,~表示排除https://或http://開頭的字符串.
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked server_names *.xxx.com xxx.com ;
if ($invalid_referer) {
return 403;
}
}