如何匹配问号“?”作为nginx.conf位置的正则表达式

时间:2013-03-30 01:35:09

标签: regex nginx

我想匹配问号“?”作为nginx.conf位置的正则表达式。

例如,我想匹配的URL模式是/某些?foo = 5或/ something?bar = 8(参数只能更改)。

因为nginx采用RCPE,我可以在nginx.conf上写下这个位置,如下所示:

location ~ ^/something\?.* {
}

以上内容与网址格式不符。我怎么能这样做?

此外,以下不是我的期望。

location ~ ^/something?.* {
}

它与我不期望的匹配/ something_foo_bar_buzz。

1 个答案:

答案 0 :(得分:29)

nginx位置块根本不匹配查询字符串。所以这是不可能的。

  

位置

     

该指令允许根据URI进行不同的配置。

在nginx中,有一个内置变量$ uri,匹配位置块。例如,提出请求

http://www.example.com/app/login.php?username=xyz&password=secret

$ uri值是这个字符串:

 /app/login.php

并且query_string存储在nginx变量$ args:

username=xyz&password=secret

做某事。查询字符串,您可以执行类似

的操作
if ($args ~ username=xyz) {
   # do something for requests with this query string
}

但要小心,IF is Evil