rewrite模块规则

rewrite 规则常与if条件判定结合使用

方式①

示例

location [匹配模式] [pattern_str]{
    if ([判定模式] [uri]){
        rewrite [src] [dst] [last|break|redirect|permanent];
    }
}

判定模式

  • -f!-f:用来判定后面uri内的文件是否存在
  • -d!-d:用来判定后面uri内的目录是否存在
  • -e!-e:用来判定后面uri内的文件或目录是否存在
  • -x!-x:用来判定后面uri内的文件是否可执行

方式②

示例

location [匹配模式] [pattern_str]{
    if ($variable_name){
        rewrite [src] [dst] [last|break|redirect|permanent];
    }
}

变量

  • 设置变量的规则
set $variable_name [value];
  • 当变量的value为空或为0时,此时if判定条件为假为”false”.无法进入if语句块执行里面的语句。
  • 当为其他值时,执行语句块内的规则。

方式③

示例

location [匹配模式] [pattern_str]{
    if ($variable_name ~ [pattern_string]){
        rewrite [src] [dst] [last|break|redirect|permanent];
    }
}

说明

  • 此方式利用正则
  • 若后面的正则表达式能够匹配到前面的变量的值,则为”true”;否则为”false”

rewrite [src] [dst] [last|break|redirect|permanent];

  • rewrite将src重定向到dst,并显示dst的内容
  • src与dst中皆可使用正则表达式,且在src中使用()后,可以按照使用的顺序 利用$1,$2,,,将前面括起来的内容在dst中使用。
  • 如 rewrite ^/cjerrybird/post-(3).html /cjerrybird/post.php?id=$1

标记

  • last: 终止location内的其他rewrite模块指令的执行,并使用dst进行新的location匹配。实现url重写,地址栏的url不变.(dst写相对路径,以/开头)
  • break:终止location内的其他rewrite模块指令的执行,并继续执行不属于rewrite模块指令的其他指令。本条规则匹配完成后,终止匹配,不在匹配后面的规则。 实现url重写,地址栏的url不变(dst写相对路径,以/开头)
  • redirect:返回302状态码 临时重定向。(dst写绝对路径,以http或https开头) 地址栏显示重定向后的url
  • permanent:返回301状态码 永久重定向。(dst写绝对路径,以http或https开头 地址栏显示重定向后的url)

rewrite后面没有标记

  • 没有任何标记则将顺序执行location内的rewrite指令
  • 若rewrite指令执行完,没有rewrite指令可以执行
  • 则将重新发起一轮location指令匹配

dst的说明

  • 若dst中以http:// https:// $scheme开头,则停止处理后续指令,并直接重定向返回给客户端

指令执行顺序

  1. 首先顺序执行server块内的location块之外的rewrite模块指令,得到rewrite后的dst
  2. 然后循环执行如下指令:()
    • 依据rewrite后的dst,匹配定义的location块
    • 顺序执行匹配到的location块内的rewrite模块指令。
  3. 如果在某一步src被重定向到dst,则循环执行上述1-2,直到找到真实的文件;若循环超过10次,则返回500 Internal Server Error错误

rewrite模块指令包括哪些

  • break指令
  • if指令
  • returen指令
  • set指令
  • rewrite指令
  • rewrite_log指令
  • uninitialized_variable_warn 指令

参考资料:官方:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
参考资料:https://segmentfault.com/a/1190000008102599
参考资料:https://imshusheng.com/linux/179.html

转载请注明:大魔王ISDevil's Blog » rewrite模块规则

喜欢 (0)
博客
32132
07-14 361
07-12 294
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值