美文网首页
rewrite知多少

rewrite知多少

作者: yandaxin | 来源:发表于2019-10-08 14:18 被阅读0次

    首先mark两个博客:

    1,nginx rewrite 指令last break区别最详细的解释

    2,Nginx中的rewrite指令(break,last,redirect,permanent)

    我的理解:
    rewrite可以在server里面,也可以在server里的location里,
    其中,在server里的rewrite和location,是先执行rewrite,再匹配location,无论二者位置如何。
    last 会以重写后的结果发起新的请求,再次匹配location。
    break 是本次重写后,即进入nginx的下一个阶段,产生数据输出的阶段。

    如果一个location中有多个rewrite,last是第一次匹配到正则后,就结束在本location中的匹配,即这个location的last个匹配,然后重写的结果还是会走其他的location;而break是结束所有的location的匹配,即break 出nginx的rewrite阶段,进入下一个阶段,nginx有11个阶段。为了更可控,我们一般采用break。

    除了常见的break和last,还有redirect和permanent


    location的匹配规则

    location [=|~|~*|^~] /uri/ { … }
    
    • = 严格匹配。如果请求匹配这个location,那么将停止搜索并立即处理此请求,是阻止正则的
    • ~ 区分大小写匹配(可用正则表达式)
    • ~* 不区分大小写匹配(可用正则表达式)
    • !~ 区分大小写不匹配
    • !~* 不区分大小写不匹配
    • ^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 不使用正则表达式

    匹配优先级:

    1.匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个匹配的正则表达式将停止搜索。

    2.一般情况下,匹配成功了普通字符串location后还会进行正则表达式location匹配。有两种方法改变这种行为,其一就是使用“=”前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;另外一种就是使用“^~”前缀,如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。

    相关文章

      网友评论

          本文标题:rewrite知多少

          本文链接:https://www.haomeiwen.com/subject/phybpctx.html