107 nginx rewrite规则和alias

background: 自从作死将apache换成了nginx,每天都要输入一长串的url,真是强行get out of safezone.....anyway,今天为了解决这个问题,决定修改nginx配置,写入alias,结果发现事情不是我想象的这么简单....
1.nginx rewrite规则

Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配

 

if        指令
规则语法:

  1. if ($http_user_agent ~MSIE){  
  2.   rewrite ^(.*)$/msie/$1 break;  
  3.  }  
  4.   
  5. if (!-f$request_filename){  
  6.     rewrite ^/img/(.*)$/site/$host/images/$1 last;  
  7.   }

rewrite 语法规则:
变量名:
    变量名可以使用"="或"!="运算符
     ~  符号表示区分大小写字母匹配
     ~* 符号表示不区分大小写字母匹配
     !~ 和 !~ 与~  !~ 相反
     -f 和 !-f   用来判断文件是否存在
     -d 和 !-d   用来判断目录是否存在
     -e 和 !-e   用来判断文件或目录是否存在
     -x 和 !-x   用来判断文件是否可以执行

      也支持$1到$9位置参数   

$1表示前面()之内的内容。  rewrite ^/(.*)$ http://www.test.cn/$1 last;

 

 

 

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

 

  1. location ~ .*\.(sh|bash)?$  
  2.  {  
  3.   return 403;  
  4.  }       

rewrite指令

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

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

 

 

location /b   {  

  1.     autoindex  on;  
  2.    alias /usr/local/nginx/html/redhat;         
  3.    rewrite ^/b/?$ /bbs permanent;  
  4.   
  5.    }  
  6.   location /bbs {  
  7.      autoindex on;  
  8.   alias /usr/local/nginx/html/bbs;  
  9.   }  

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

  1. rewrite ^/b/?$ /bbs permannet;  



2,根据不同的浏览器将得到不同的结果。if ($http_user_agent ~ Firefox) {  

  1.   rewrite ^(.*)$ /firefox/$1 break;  
  2.   }  
  3.   
  4.   if ($http_user_agent ~ MSIE) {  
  5.     rewrite ^(.*)$ /msie/$1 break;  
  6.    }  
  7.   
  8.  if ($http_user_agent ~ Chrome) {  
  9.       rewrite ^(.*)$ /chrome/$1 break;  
  10.  }   

 

3.防止盗链:

根据Referer信息防止盗链,代码如下:

  1. location ~*\.(gif|jpg|png|swf|flv)${  
  2. valid_referers none blocked www.cheng.com*.test.com;  
  3. if ($invalid_referer)  
  4.  rewrite ^/(.*) http://www.cheng.com/error.html           
  5.   }  


4.实现域名跳转:

  1. server {  
  2.          listen       80;  
  3.          server_name  cheng.example.com;  
  4.          write ^(.*)$  http://zhang.example.com/$1 permanent;  
  5.          location / {  
  6.              root   html;  
  7.              index  index.html index.htm;  
  8.          }  

 

https://segmentfault.com/q/1010000006136366

最近在看nginx,但是不太清楚alias的用途具体有什么用?root和rewrite都可以实现它,为什么还要使用alias呢?

root /data/mydomain/main/web/;
location ~* ^/app(|/)$ {
        #alias /data/mydomain/main/public/app/;
        rewrite  ^/app(|/)$ /public/app/ last;
        expires 30s;
}

这是你自己的理解问题,首先rewrite和root以及alias根本不沾边。
rewrite是针对http请求的,他里面的路径是网址里面的地址,是地址间的转换。
而root和alias是系统文件路径的设置。
区中root用来设置根目录,而alias用来重置当前文件的目录。

location /img/ {
    alias /var/www/image/;
}
#若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件
location /img/ {
    root /var/www/image;
}
#若按照这种配置的话,则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件。]

转载于:https://my.oschina.net/newchaos/blog/1795382

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值