nginx rewrite规则语法教程

发布时间:2020-11-26编辑:脚本学堂
nginx rewrite 规则用法,rewrite 实现url的重写,nginx的rewrite规则采用pcre,perl兼容正则表达式的语法规则匹配,具体用法见文中教程。

nginx  rewrite(nginx url地址重写)
rewrite 实现url的重写,nginx的rewrite规则采用pcre,perl兼容正则表达式的语法规则匹配,如果需要nginx的rewrite功能,在编译nginx之前,需要编译安装pcre库。
通过rewrite规则,可以实现规范的url、根据变量来做url转向及选择配置。
 
if指令
规则语法:
 

复制代码 代码示例:
if ($http_user_agent ~MSIE){ 
rewrite ^(.*)$/msie/$1 break
 } 
 
if (!-f$request_filename){ 
  rewrite ^/img/(.*)$/site/$host/images/$1 last; 

rewrite 语法规则:
变量名:
 

变量名可以使用"="或"!="运算符
 ~  符号表示区分大小写字母匹配
 ~* 符号表示不区分大小写字母匹配
 !~ 和 !~ 与~  !~ 相反
 -f 和 !-f   用来判断文件是否存在
 -d 和 !-d   用来判断目录是否存在
 -e 和 !-e   用来判断文件或目录是否存在
 -x 和 !-x   用来判断文件是否可以执行
  也支持$1到$9位置参数

return指令
示例:,如果访问的URL以.sh .bash 结尾,返回状态码403
 

复制代码 代码示例:
location ~ .*.(sh|bash)?$ 
 { 
  return 403; 
}  

rewrite指令
rewrite指令的最后一项参数为flag标记,支持的flag标记主要有以下几种: 
last :相当于apache里德(L)标记,表示完成rewrite; 
break;本条规则匹配完成后,终止匹配,不再匹配后面的规则 
redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址 
permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址 
last和break用来实现URL重写,浏览器地址栏URL地址不变 

实例:将访问/b跳转到/bbs目录上去:
 

复制代码 代码示例:
location /b   { 
autoindex  on; 
   alias /usr/local/nginx/html/redhat;
   rewrite ^/b/?$ /bbs permanent; 
 
   } 
  location /bbs { 
 autoindex on; 
  alias /usr/local/nginx/html/bbs; 
  } 

rewrite规则编写实例
1,将原来要访问/b的目录重写为/bbs
核心语句:
 

rewrite ^/b/?$ /bbs permannet; 

2,根据不同的浏览器将得到不同的结果。
 

复制代码 代码示例:
if ($http_user_agent ~ Firefox) { 
  rewrite ^(.*)$ /firefox/$1 break; 
  } 
 
  if ($http_user_agent ~ MSIE) { 
rewrite ^(.*)$ /msie/$1 break; 
   } 
 
 if ($http_user_agent ~ Chrome) { 
  rewrite ^(.*)$ /chrome/$1 break; 
 }  

3、防止盗链:
根据Referer信息防止盗链
 

复制代码 代码示例:
location ~*.(gif|jpg|png|swf|flv)${ 
valid_referers none blocked www.plchome.org*.test.com; 
if ($invalid_referer) 
 rewrite ^/(.*) http://www.plchome.org/error.html  
  } 

4、域名跳转:
 

复制代码 代码示例:
server { 
 listen   80; 
 server_name  cheng.example.com; 
 write ^(.*)$  http://zhang.example.com/$1 permanent; 
 location / { 
 root   html; 
 index  index.html index.htm; 
 }