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

nginx之location匹配规则

爱可可的人生记录仪 2019-08-17
125

最近遇到一个问题,精心准备的url始终跳不到指定的规则上,故深入了解了一下location的匹配规则及顺序,整理如下:

匹配规则:

前缀字符串

=:精确匹配

^~: 匹配上后则不再进行正则表达式匹配

正则表达式:

~:大小写敏感的正则匹配

~*:忽略大小写的正则匹配

@:用于内部跳转的命名location

匹配顺序:

  1. 遍历匹配全部的前缀字符串location

  2. 如果匹配上=和^~,就使用匹配的字符串,不再继续匹配。

  3. 如果没有匹配上,会记住最长匹配的前缀字符串location(无视正则匹配)

  4. 然后按照nginx.conf中的顺序依次匹配正则表达式location,匹配上就使用。(优先级正则大于前缀)

  5. 如果没有匹配上,就使用最长匹配的前缀字符串location。


看个例子

    location ^~ keke/ {
        return 200 '~/keke/';
        }
    location ~ /keke/(\w+)$ {
        return 200 '/keke/zhengze';
        }
    location /keke/keke/ {
        return 200 '/keke/keke/';
        }
    location = /keke/ {
        return 200 '=/keke/';
        }
    location /keke/haha {
        return 200 '/keke/haha';
        }

    我访问以下内容会返回什么呢?

    curl http://localhost/keke/ 

    curl http://localhost/keke/haha

    curl http://localhost/keke/keke/

    curl http://localhost/keke/keke/keke

    curl http://localhost/keke/keke2

    第一个返回的是=/keke/ ,=优先级更高

    第二个返回的是/keke/zhengze,正则优先级高,

    第三个返回的是/keke/keke/

    第四个返回的是/keke/keke/

    第五个返回的是~/keke/ ,最长匹配无视正则匹配




    部分内容来自网络,如有侵权请联系作责删除。

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

    评论