• 【Web】Nginx Rewrite规则


    Rewrite介绍

      Rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。

    规则

    Nginx Rewrite Flags 

    • * last 相当于Apache里的[L]标记,表示完成rewrite
    • * break 终止匹配, 不再匹配后面的规则
    • * redirect 返回302临时重定向
    • * permanent 返回301永久重定向


    Nginx正则表达式匹配 

    • * ~ 为区分大小写匹配
    • * ~* 为不区分大小写匹配
    • * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配


    Nginx文件及目录匹配 

    • * -f和!-f用来判断是否存在文件
    • * -d和!-d用来判断是否存在目录
    • * -e和!-e用来判断是否存在文件或目录
    • * -x和!-x用来判断文件是否可执行

    全局变量

    • $args : #这个变量等于请求行中的参数,同$query_string
    • $content_length : 请求头中的Content-length字段。
    • $content_type : 请求头中的Content-Type字段。
    • $document_root : 当前请求在root指令中指定的值。
    • $host : 请求主机头字段,否则为服务器名称。
    • $http_user_agent : 客户端agent信息
    • $http_cookie : 客户端cookie信息
    • $limit_rate : 这个变量可以限制连接速率。
    • $request_method : 客户端请求的动作,通常为GET或POST。
    • $remote_addr : 客户端的IP地址。
    • $remote_port : 客户端的端口。
    • $remote_user : 已经经过Auth Basic Module验证的用户名。
    • $request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
    • $scheme : HTTP方法(如http,https)。
    • $server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
    • $server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
    • $server_name : 服务器名称。
    • $server_port : 请求到达服务器的端口号。
    • $request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
    • $uri : 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
    • $document_uri : 与$uri相同。

    例:http://localhost:88/test1/test2/test.jsp
    $host:localhost
    $server_port:88
    $request_uri:http://localhost:88/test1/test2/test.jsp
    $document_uri:/test1/test2/test.php
    $document_root:/var/www/html
    $request_filename:/var/www/html/test1/test2/test.jsp

    规则实例

      1、将原来要访问/data目录重写为/q

        rewrite ^/data/?$ /q/parmanent;
        

      2、根据不同浏览器将得到不同的结果    

        if ($http_user_agent ~ Chrome) {  
              rewrite ^(.*)$ /chrome/$1 break;  
         }
        
        更目录下文件结构如下图:
        

        然后在火狐浏览器和谷歌浏览器中输入地址  http://server/index.html, 这里必须加上index.html

      3、防止盗链
        代码如下:

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

       4、实现域名跳转

    1  if ($host = "index.test.cn") {
    2             rewrite ^/(.*)$ http://www.test.cn/$1 permanent;
    3         }

        

        

     

          

  • 相关阅读:
    JavaScript 时间帮助封装
    EntityFramework 基类重写
    sql server 大数据, 统计分组查询,数据量比较大计算每秒钟执行数据执行次数
    C# DataTable 转实体对象
    EF自动创建数据库步骤之四(启用数据库初始器)
    EF自动创建数据库步骤之三(自定义数据库初始器)
    EF自动创建数据库步骤之二(继承DbContext类)
    EF自动创建数据库步骤之一(实体类写法)
    十大排序算法_java实现
    位运算
  • 原文地址:https://www.cnblogs.com/h--d/p/7150286.html
Copyright © 2020-2023  润新知