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简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 2,124评论 0 9
  • 1.ngnix介绍 ngnix www服务软件 俄罗斯人开发 开源 性能很高 本身是一款静态WWW软件 静态小文件...
    逗比punk阅读 2,154评论 1 6
  • Nginx重写与转发 Nginx通过ngx_http_rewrite_module模块,实现Url的重写和转发。 ...
    你东哥呀阅读 2,895评论 0 2
  • location正则写法 location使用语法: location [ = | ~ | ~* | ^~ ] u...
    Zhang21阅读 14,672评论 0 5
  • 1.简介:  Nginx:engine X ,2002年,开源,商业版 http协议:web服务器(类似于ht...
    尛尛大尹阅读 1,910评论 0 3