nginx中location的正则配置

背景

一个项目中在location中配置的uri是变化的,需要通过正则项来匹配。此外顺便梳理下location中的配置问题。

详解:

模式含义
location = /uri= 表示精确匹配,只有完全匹配上才能生效
location ^~ /uri^~ 开头对URL路径进行前缀匹配,并且在正则之前
location ~ pattern开头表示区分大小写的正则匹配
location ~* pattern开头表示不区分大小写的正则匹配
location /uri不带任何修饰符,也表示前缀匹配,但是在正则匹配之后
location /通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default

多个 location 配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):

  • 首先精确匹配 =
  • 其次前缀匹配 ^~
  • 其次是按文件中顺序的正则匹配
  • 然后匹配不带任何修饰的前缀匹配。
  • 最后是交给 / 通用匹配
  • 当有匹配成功时候,停止匹配,按当前匹配规则处理请求

注意:前缀匹配,如果有包含关系时,按最大匹配原则进行匹配。比如在前缀匹配:location /test1 与 location /test1/test2,如有请求 http://localhost/test1/test2/file 将最终匹配到localhost/test1/test2.
经过测试也确实如此。

注意:

如果在正则表达式里面有{},这会与location模块的{}冲突,这时候需要将正则表达式用单引号或者双引号起来。

测试case:

location = /test1 {
        echo "test1";
    }

    location ^~ /test2 {
        echo "test2";
    }

    location ^~ /test2/test3/test4 {
        echo "test2/3/4";
    }

    location = /test2018 {
        echo "test2018";
    }

    location ~* /TEST2018 {
        echo "TEST2018";
    }

    location  /test20182019 {
        echo "/test20182019";
    }

   #location ~ "/([\S]{8})" {
   #echo "regu model";
   #}

    location  /Test2019 {
        echo "/Test20192019";
    }

    location  /Test2019/test2020 {
        echo "/Test2019test20202020";
    }

自己可以尝试下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值