Nginx正则表达式位置

时间:2015-12-17 11:21:48

标签: python regex nginx

此正则表达式不起作用。

下面就是那个。

    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`

看到症状,转义字符(\)无法正常工作。

2 个答案:

答案 0 :(得分:1)

你的正则表达没问题。问题在于Nginx如何检查传入的请求。

Nginx将?之后的任何内容视为请求中的查询字符串。在您的示例中,location块与$uri变量(/a2aEx)匹配。位置块检查$args变量,这是您尝试匹配的变量。

您的第二个示例正确匹配$uri变量。

要对参数进行操作,您可以使用Nginx的if运算符,但它是generally discouraged.

答案 1 :(得分:0)

逃避问题?

请尝试以下方法之一:

  • 加倍反斜杠

    location ~* /a2aEx\\?.*$ {
    
  • 将正则表达式放在引号

    location ~* "/a2aEx\?.*$" {
    
  • 替换为字符类

    location ~* "/a2aEx[?].*$" {