Nginx Rewrite规则初探(转)

简介: Nginx  rewrite(nginx url地址重写)Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。
Nginx  rewrite(nginx url地址重写)
Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。
通过Rewrite规则,可以实现规范的URL、根据变量来做URL转向及选择配置。 
 
if        指令
规则语法:
[plain]  view plain  copy
 
  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位置参数

return指令
示例:,如果访问的URL以.sh .bash 结尾,返回状态码403
[plain]  view plain  copy
 
  1. location ~ .*\.(sh|bash)?$  
  2.  {  
  3.   return 403;  
  4.        }       

     
rewrite指令
[plain]  view plain  copy
 
  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目录上去:
[plain]  view plain  copy
 
  1. location /b   {  
  2.     autoindex  on;  
  3.    alias /usr/local/nginx/html/redhat;         
  4.    rewrite ^/b/?$ /bbs permanent;  
  5.   
  6.    }  
  7.   location /bbs {  
  8.      autoindex on;  
  9.   alias /usr/local/nginx/html/bbs;  
  10.   }  
rewrite规则编写实例
1,将原来要访问/b的目录重写为/bbs
     核心语句:
[plain]  view plain  copy
 
  1. rewrite ^/b/?$ /bbs permannet;  


2,根据不同的浏览器将得到不同的结果。
[plain]  view plain  copy
 
  1. if ($http_user_agent ~ Firefox) {  
  2.   rewrite ^(.*)$ /firefox/$1 break;  
  3.   }  
  4.   
  5.   if ($http_user_agent ~ MSIE) {  
  6.     rewrite ^(.*)$ /msie/$1 break;  
  7.    }  
  8.   
  9.  if ($http_user_agent ~ Chrome) {  
  10.       rewrite ^(.*)$ /chrome/$1 break;  
  11.  }   
3.防止盗链:
根据Referer信息防止盗链,代码如下:
[plain]  view plain  copy
 
  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.实现域名跳转:
[plain]  view plain  copy
 
  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.          } 

 

http://blog.csdn.net/xifeijian/article/details/20955253

相关文章
|
5月前
|
应用服务中间件 nginx Perl
Nginx系列教程(09) - rewrite
Nginx系列教程(09) - rewrite
59 0
|
8月前
|
应用服务中间件 nginx
Nginx rewrite(URL)地址重定向
Nginx rewrite(URL)地址重定向
308 0
|
9月前
|
前端开发 应用服务中间件 API
Nginx 反向代理 去除 路径匹配规则url
Nginx 反向代理 去除 路径匹配规则url
|
6月前
|
应用服务中间件 nginx 数据安全/隐私保护
安装Nginx报错:make: *** 没有规则可以创建“default”需要的目标“build”。 停止。
安装Nginx报错:make: *** 没有规则可以创建“default”需要的目标“build”。 停止。
172 0
|
3月前
|
数据采集 应用服务中间件 nginx
百度搜索:蓝易云【nginx一些常用user_agent的匹配规则】
这个规则将会根据user_agent中是否包含"Android"、"iPhone"或"iPad"等关键词,将根目录的访问重定向到/mobile/目录下。需要注意的是,使用if指令可能会导致性能下降,建议尽量使用map模块进行user_agent的匹配。在编写规则时,应该确保匹配规则的准确性,以免误判或产生意外的结果。
59 0
|
5月前
|
应用服务中间件 程序员 Shell
后端程序员不得不会的 Nginx 转发匹配规则
后端程序员不得不会的 Nginx 转发匹配规则
|
6月前
|
运维 Java 应用服务中间件
【Nginx用法】nginx location正则表达式写法,详解Nginx location 匹配规则(很详细哦)
【Nginx用法】nginx location正则表达式写法,详解Nginx location 匹配规则(很详细哦)
77 0
|
7月前
|
前端开发 应用服务中间件 PHP
nginx之rewrite
nginx之rewrite
45 0
|
10月前
|
应用服务中间件 PHP nginx
一次NGINX rewrite重定向403错误排除
一次NGINX rewrite重定向403错误排除
|
缓存 应用服务中间件 PHP
Nginx及rewrite跳转(二)
Nginx及rewrite跳转(二)
Nginx及rewrite跳转(二)