【问题标题】:nginx location match rule, without matching trailing charactersnginx位置匹配规则,不匹配尾随字符
【发布时间】:2018-10-24 23:27:07
【问题描述】:

我有以下规则:

location /foo {

与以下示例非常匹配:

mydomain.com/foo
mydomain.com/foo/
mydomain.com/foo/bar?example=true

但它也匹配

mydomain.com/foobar

我不希望它与最后一个 (/foobar) 匹配,它应该仅在 foo 后面没有任何内容,或者后面没有斜线和零个或多个字符的情况下匹配。我已经尝试过 location /foo/ {,但这也没有产生预期的结果。

谁能解释一下如何做到这一点?

【问题讨论】:

    标签: nginx nginx-location nginx-reverse-proxy


    【解决方案1】:

    有两种方法可以处理这个问题,使用正则表达式 location 块 - 或者只处理 /foo/foo/

    正则表达式 location 块具有不同的评估顺序,效率低于前缀 location 块,因此我首选的解决方案是完全匹配 location 和前缀 location

    一般情况下,/foo 只是重定向到/foo/,例如:

    location = /foo { 
        return 302 /foo/; 
    }
    location /foo/ {
        ...
    }
    

    请参阅this document 了解更多信息。

    【讨论】:

      【解决方案2】:

      您可以为 /foobar 创建一个 Location 规则,无论您是否需要它作为例外:

      location = /foobar {
          .... 
      }
      

      Nginx 通过 = 操作符匹配第一个 URI。

      【讨论】:

        猜你喜欢
        • 2017-08-11
        • 1970-01-01
        • 2011-07-11
        • 2014-11-11
        • 1970-01-01
        • 2020-01-18
        • 1970-01-01
        • 2020-02-22
        • 2017-01-03
        相关资源
        最近更新 更多