21

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

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

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

location ~ ^/something\?.* {
}

以上与 URL 模式不匹配。我怎样才能做到这一点?

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

location ~ ^/something?.* {
}

它会匹配我没想到的 /something_foo_bar_buzz。

4

1 回答 1

40

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
}

但要小心,如果是邪恶的

于 2013-03-30T02:56:04.233 回答