此正则表达式不起作用。
下面就是那个。
location ~* /a2aEx\?.*$ {
}
我要求/a2aEx?AID=ASA_1&BID=1
,但NGINX会回复404 status
但是如果我将其修复到下面,它可以正常工作,返回200 status
location ~* /a2aEx.*$ { # remove `\?`
}
我使用下面的代码在Python上验证我的正则表达式。
text = "/a2aEx?AID=ASA_1&BID=1"
reObj = re.match("/a2aEx\?.*$", text)
print reObj.string # it returns `/a2aEx?AID=ASA_1&BID=1`
看到症状,转义字符(\
)无法正常工作。
答案 0 :(得分:1)
你的正则表达没问题。问题在于Nginx如何检查传入的请求。
Nginx将?
之后的任何内容视为请求中的查询字符串。在您的示例中,location
块与$uri
变量(/a2aEx
)匹配。位置块不检查$args
变量,这是您尝试匹配的变量。
您的第二个示例正确匹配$uri
变量。
要对参数进行操作,您可以使用Nginx的if
运算符,但它是generally discouraged.
答案 1 :(得分:0)
逃避问题?
请尝试以下方法之一:
加倍反斜杠
location ~* /a2aEx\\?.*$ {
将正则表达式放在引号
中location ~* "/a2aEx\?.*$" {
替换为字符类
location ~* "/a2aEx[?].*$" {