当前位置: > Linux服务器 > nginx >

nginx rewrite(nginx url地址重写)

时间:2016-12-22 13:40来源:linux.it.net.cn 作者:IT
本文介绍下,在nginx中配置url地址重写的方法,有需要的朋友参考下。
nginx中,Rewrite用来实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。

先来熟悉下,nginx中的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,防止盗链:
 

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

4,实现域名跳转:
 

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


(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容