nginx位置匹配规则,没有匹配的尾随字符

时间:2018-05-15 07:48:15

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

我有以下规则:

location /foo {

以下示例适用:

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

然而它也匹配

mydomain.com/foobar

我不希望它与最后一个匹配(/ foobar),它应该只匹配foo后面没有任何内容,或斜杠和后面的零个或多个字符。我尝试过 location / foo / {,但这也不会产生预期效果。

有人能说清楚如何做到这一点吗?

2 个答案:

答案 0 :(得分:1)

有两种方法可以处理此问题,使用正则表达式location阻止 - 或者只是/foo分别处理/foo/

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

通常,/foo只会重定向到/foo/,例如:

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

有关详情,请参阅this document

答案 1 :(得分:-1)

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

list_item.xml

Nginx匹配第一个URI by =运算符。