Nginx Rewrite规则初探

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.cheng.com*.test.com;  
    if ($invalid_referer)  
     rewrite ^/(.*) http://www.cheng.com/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;  
         }  
原文地址:http://blog.csdn.net/xifeijian/article/details/20955253
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值