• Nginx Rewrite规则初探(转)


    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

  • 相关阅读:
    linux 的iptables失效解决方法
    解决Navicat for MySQL 连接 Mysql 8.0.11 出现1251- Client does not support authentication protocol 错误
    HTTP 请求中的 Form Data 与 Request Payload 的区别
    Git本地初始化并推送到远程仓库
    git 提交大小超过100M
    Linux压缩解压
    关闭seLinux
    MAT内存分析
    JVM&GC
    IDEA 好用的插件
  • 原文地址:https://www.cnblogs.com/softidea/p/5659002.html
Copyright © 2020-2023  润新知