Nginx的rewrite指令

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; 
  } 
} 

你可能感兴趣的:(Nginx的rewrite指令)