zoukankan      html  css  js  c++  java
  • nginx学习之rewrite

    rewrite 语法学习

    什么是rewrite

    nginx的rewrite主要功是实现URL地址重写。nginx的rewrite规则需要PCRE的支持,既可以通过Perl兼容正则表达式进行规则匹配。nginx在默认编译安装时就会安装rewrite。

    rewrite的语法

    Syntax:	rewrite regex replacement [flag];
    Default: —
    Context: server, location, if
    

    所属模块:

    rewrite属于ngx_http_rewrite_module模块

    语法简介:

    • rewrite 为关键字固定写法
    • regex 为perl兼容正则表达式语句,用来进行规则匹配
    • replacement 重写后的URL
    • flag rewrite支持的flag标记

    可选的flag参数可以是其中之一:

    last:

      停止执行当前这一轮的ngx_http_rewrite_module指令集,然后查找匹配改变后URI的新location;

    break:

      停止执行当前这一轮的ngx_http_rewrite_module指令集;

    redirect:

      在replacement字符串未以http://https://开头时,使用返回状态码为302的临时重定向;

    permanent:

       返回状态码为301的永久重定向。

    • rewrite指令执行先后的顺序是其该指令在nginx配置文件中的出现的位置
    • rewrite指令在其正则表示式匹配的地方的只对部分域名后面的URL进行匹配

       例: 当一个访问的URL为 http://www.drjc.com/data/list.html那么rewrite的regex(正则表达式)匹配的为/data/list.html
    • 如果replacement的字符串以http://https://开头,nginx将结束执行过程,并返回给客户端一个重定向。
    • 在对rewrite指令的last和break标志的使用可以参考下面的建议:
    使用rewrite指令在根location(也就是 `location /`) 和server{}区块时建议使用`flag`标志为`last`标志;
    如果在普通的location区块中必须不能使用last,建议使用break标志;
    在if{}指令中建议使用break标志;
    如果正则表达式中包含字符“{}”或者“;”整个正则表达式应该被包含在单引号或双引号的引用中;
    
    • 如果replacement字符串包括新的请求参数,以往的请求参数会添加到新参数后面。如果不希望这样,在replacement字符串末尾加一个问号“?”,就可以避免

      比如:
    rewrite ^/users/(.*)$ /show?user=$1? last;
    
  • 相关阅读:
    day07_09 metaclass创建一个类
    day07_12 python中的异常处理 与 自定义异常报错
    MS Project 中如何设定计划进行状态灯。
    1分钟创建图表[利用Office Web Component OWC组件]
    使用net use来定义工作共享盘的连接。
    用.NET创建Windows服务[转载]
    创建Text文件,使用不同的编码会造成生成乱码的现象和解决方法
    老大有没有搞错。
    一句话笑话
    sql点滴
  • 原文地址:https://www.cnblogs.com/wei-G/p/8575905.html
Copyright © 2011-2022 走看看