• nginx——rewrite模块


    1.什么是Nginx的Rewrite规则?
    Rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE(Perl
    Compatible Regular Expressions)Perl兼容正则表达式的语法进行规则匹配,如果


    您需要Nginx的Rewrite功能,在编译Nginx之前,须要编译安装PCRE库.
    通过Rewrite规则,可以实现规范的URL,根据变量来做URL转向及选择配置.

    (1)一些使用MVC框架的程序只有一个入口,可以通过Rewrite来实现.
    (2)一些动态URL地址须要伪装成静态HTML,便于搜索引擎抓取,也需要Rewrite来处理
    (3)一些由于目录结构,域名变化的旧URL,须要跳转到新的URL上,可以通过Rewrite来

    处理.

    2.Nginx Rewrite规则相关指令
    if , rewrite , set , return , break
    (1)break,完成当前的规则集,不再处理rewrite指令.
    (2)if 

    语法: if(condition){...}
    用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句.if指令不支持嵌

    套,不支持多个条件&&和||处理.
    以下信息可以被指定为条件:
    1)变量名,其中错误的值包括:空字符串"",或者任何以0开始的字符串.
    2)变量比较可以使用=和!=运算符
    3)"~"符号表示区分大小写字母的匹配.
    4)"~*"符号表示不区分大小写字母的匹配.如firefox和FireFox是匹配的.
    5)"!~"和"!~*"符号的作用刚好和"~","!~"相反,表示不匹配.
    6)"-f"和"!-f"用来判断文件是否存在.
    7)"-d"和"!-d"用来判断目录是否存在.
    8)"-e"和"!-e"用来判断文件或目录是否存在.
    9)"-x"和"!-x"用来判断文件是否可执行.
    (3)return 语法:return code
    该指令用于结束规则的执行并返回状态码给客户端.状态码可以使用这些

    值:204,400,402-406,408,410,413,416,及500-504.非标准状态码,444将以不发送

    任何Header头的方式结束连接.
    403Forbidden.服务器已经理解请求,但是拒绝执行它.
    404Not Found.请求失败,请求所希望得到的资源未在服务器上发现.404这个状态码

    被广泛应用于当服务器不想揭示为何请求被拒绝,或者没有其他适合的响应可用的情

    况下.
    500Internal Server Error.服务器遇到一个未曾预料的状况,导致它无法完成对请

    求的处理.一般来说,这个问题都会在服务器的程序码出错时出现.
    502Bad Gateway.作为网关或代理工作的服务器尝试执行请求时,从上游服务器接收

    到无效的响应.
    503Service Unavailable.由于临时的服务器维护或过载,服务器当前无法处理请求.

    这个状况是临时的,并且将在一段时间以后恢复.503状态码的存在并不意味着服务器

    在过载的时候必须使用它.某些服务器只不过是希望拒绝客户端的连接.
    504 Gateway Timeout作为网关或代理工作的服务器尝试执行请求时,未能及时从上

    游服务器(URI标识出的服务器,例如HTTP,FTP,LDAP)或辅助服务器(例如DNS)收到响

    应.
    (4)rewrite指令.语法:rewrite regex replacement flag .该指令根据表达式来重

    定向URI,或者修改字符串.指令根据配置文件中的顺序来执行.注意重写表达式只对

    相对路径有效.如果想配对主机名,应该使用If语句.
    rewrite指令的最后一项参数为flag标记,支持的flag标记有:
    last——相当于Apache里的[L]标记,表示完成rewrite.
    break——本条规则匹配完成后,终止匹配,不再匹配后面的规则.
    redirect——返回302临时重定向,浏览器地址栏会显示跳转后的URL地址.
    permanent——返回301永久重定向,浏览器地址栏会显示跳转后的URL地址.
    在以上标记中,last和break用来实现URI重写,浏览器地址栏的URL地址不变,但在服

    务器端访问的路径发生了变化.redirect和permanent用来实现URL跳转,浏览器地址

    栏会显示跳转后的URL地址.
    1)一般在根location中(即location/{...})或直接在server标签中编写rewrite规则

    .推荐使用last标记,在非根location中(location/cms/{...}),则使用break标记.
    如:
    rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 last ;
    rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra last ;
    return 403 ;

    location /download/{
      rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 break ;
      rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra break ;
      return 403 ;
    }
    2)如果被替换的URI中含有参数(即类似/app/test.php?id=5之类的URI),默认情况

    下参数会被自动附加到替换串上,你可以通过在替换串的末尾加上?标记来解决这一

    问题.不加?标记和加上?标记的URL跳转区别:

    rewrite ^/test(.*)$ http://www.yourdomain.com/home permanent ;
    访问http://www.yourdomain.com/test?id=5 经过301跳转后的URL地址为

    http://www.yourdomain.com/home?id=5

    rewrite ^/test(.*)$ http://www.yourdomain.com/home? permanent ;
    访问http://www.yourdomain.com/test?id=5 经过301跳转后的URL地址为

    http://www.yourdomain.com/home

    (5)set指令.语法: set variable value .该指令用于定义一个变量,并给变量赋值.

    变量的值可以为文本,变量及文本变量的联合.例如: set $varname 'hello' ;u

    (6)uninitialized_variable_warn 指令. 语法uninitialized_variable_warn on|

    off 该指令用于开启或关闭记录关于未初始化变量的警告信息,默认值为开启.

    (7)Nginx Rewrite可以用到的全局变量.
    在if , location , rewrite 指令中,可以使用以下局部变量.
    $args , $content_length , $content_type ,$document_root , $document_uri,

    $host , $http_user_agent , $http_cookie , $limit_rate ,

    $request_body_file , $request_method , $remote_addr , $remote_port ,

    $remote_user , $remote_filename , $request_uri , $query_string , $scheme

    ,$server_protocol , $server_addr , $server_name , $server_port , $uri

     
  • 相关阅读:
    Jquery 超炫的导航效果
    使用python以滑动窗口方式统计基因组fasta文件中各序列的各碱基(如GC碱基)平均含量
    python 中 根据基因位置信息在基因组fasta文件中获取对应的基因序列
    python 中将多个连续的字符替换为一个字符
    python中截取序列的反向互补序列
    python 中实现文本的转置
    linux 中 shell 将fasta文件依据scafold 拆分为单独的文件
    python 中将文本中多个连续的制表符或空格替换为一个制表符
    python 中文件打开后只能调用一次??
    python 中 列表内循环结构
  • 原文地址:https://www.cnblogs.com/timelesszhuang/p/4639158.html
Copyright © 2020-2023  润新知