暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

nginx实现rewrite

DevOps视角 2017-04-16
40

作者介绍

牛恒博一线运维人,擅长为中小企业快速实现运维从无到有,再到自动化。现就职于某医疗大数据公司。

rewrite介绍

        rewrite模块允许使用正则表达式重写URL(需要PCRE库),并且可以根据相关变量重定向和选择不同的配置。
        如果这个指令再server字段中指定,那么将被请求的location确定之前执行。如果指令执行后所选择的location中有其它重写规则,那么它们也被执行。如果再location中执行这个指令产生了新的URL,那么location又一次确定了新的URL。
        这样的循环最多执行10次,超过以后nginx将返回500错误。

rewrite语法

格式: rewrite regex replacement [flag];
默认参数: -
作用域:  server,location,if
  • regex:支持正则表达式,字符串等

  • replacement: 匹配规则后的重定向

  • flag的参数包括

    1. laste:表示完成rewrite,浏览器地址蓝URL地址不变

    2. break:本条规则匹配完成后,终止匹配,不再匹配后面的规则,浏览器地址栏URL地址不变

    3. redirect:返回302临时重定向,浏览器地址汇现实跳转后的URL地址,如果替换字段用http://开头泽被使用

    4. permanent:返回301永久重定向,浏览器汇显示跳转后的URL地址

last和break的区别:
        break匹配完成后,不再继续匹配。last匹配完成后,会使用新的URL继续匹配下去。 

last示例

server {
    location  {
        rewritw last/ 1.html last;
    }
    location = /1.html {
        return 400;
    }
}

访问/last/时重写到/1.html,然后使用新的uri再匹配,匹配到location =  /1.html,结果返回400 

break示例

server {
    location / {
        rewritw /break/ /1.html break;
    }
    location = /1.html {
        return 400;
    }
}

访问/break/时重写到/1.html,由于返回了break,就不再继续进行匹配 

if模块

语法

格式:if (condition) {...}
默认值: -
作用域:server,location

        if判断如果结果为true,那么在大括号中指定的模块指令将被执行,并且请求被分配在if指令内部的配置。 if指令内的配置继承自先前的配置级别。条件可以是以下任何一个:变量名;如果变量的值为空字符串或“0”,则为false;在版本1.0.1之前,以“0”开头的任何字符串被视为false值。 

  • 使用=
    !=
    运算符将变量与字符串进行比较;

  • 使用
    (区分大小写匹配)和〜*
    (区分大小写匹配)运算符匹配正则表达式

  • 正则表达式中的括号包含起来以后在$1 .. $9变量中重用的捕获。负运算符!〜
    !〜*
    也可用

  • 如果正则表达式包含}
    ;
    字符,则整个表达式应用单引号或双引号括起来

  • 使用-f
    !-f
    运算符检查文件存在

  • 使用-d
    !-d
    运算符检查目录存在

  • 使用-e
    !-e
    运算符检查文件,目录或符号链接是否存在

  • 使用-x
    !-x
    运算符检查可执行文件


未经平台同意授权不得转载

来源:DevOps 视角订阅号


记得关注哦



文章转载自DevOps视角,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论