rewrite指令来源于模块ngx_http_rewrite_module
用于使用PCRE正则表达式更改请求URI,返回重定url
Rewrite是由pcre模块提供功能,提供伪静态等功能。
rewrite 存在于if,location,server标签中
在server块下,会优先执行rewrite部分,然后才会去匹配location块
rewrite指令:
last:本条规则匹配完毕后继续匹配之后的location url,最多循环10次。
break:本条规则匹配完成即终止,不再匹配后面的任何规则。
permanent:返回302临时重定向,浏览器地址会显示跳转后的URL地址。
redirect:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。
例如域名跳转:
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
}
根据agent重定向目录其他目录
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /nginx-ie/$1 break;
}
改写URL内容
/23423/xxx ---- /xxx?id=23423
rewrite ^/(/d+)/(.+)/ /$2?id=$1 last;
防盗链
valid_referers [none|blocked|server_names|string]
该指令会根据Referer Header头的内容分配一个值为0或1给变量$invalid_referer。如果Referer Header头不符合valid_referers指令设置的有效Referer,变量$invalid_referer
将被设置为1.
该指令的参数可以为下面的内容:
none:表示无Referer值的情况。
blocked:表示Referer值被防火墙进行伪装。
server_names:来源头部包含当前的server_names(当前域名)
string:
arbitrary string
任意字符串,定义服务器名或者可选的URI前缀.主机名可以使用*开头或者结尾,在检测来源头部这个过程中,来源域名中的主机端口将会被忽略掉
regular expression
正则表达式,~表示排除https://或http://开头的字符串.
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked server_names *.xxx.com xxx.com ;
if ($invalid_referer) {
return 403;
}
}
网友评论