• 【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         }

        

        

     

          

  • 相关阅读:
    stenciljs 学习四 组件装饰器
    stenciljs 学习三 组件生命周期
    stenciljs 学习二 pwa 简单应用开发
    stenciljs ionic 团队开发的方便web 组件框架
    stenciljs 学习一 web 组件开发
    使用npm init快速创建web 应用
    adnanh webhook 框架 hook rule
    adnanh webhook 框架 hook 定义
    adnanh webhook 框架request values 说明
    adnanh webhook 框架execute-command 以及参数传递处理
  • 原文地址:https://www.cnblogs.com/h--d/p/7150286.html
Copyright © 2020-2023  润新知