为什么 nginx 选择具有不匹配正则表达式的位置块?

为什么 nginx 选择具有不匹配正则表达式的位置块?

在我的 nginx 配置文件中我有这个location块(为了调试目的进行了修改):

location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
    expires 1;
    log_not_found off;
    return 515 "Request URI is $request_uri. Caught you";
}

当我从服务器请求此 URI 时: /img/signup/be0e1d34fabf2514d49db9baec09f858.png?w=198&h=198&s=9a7d22504c5ae176a936a0f18cccacba

果然,它匹配了,我收到了一个 515 响应,其内容如下: Request URI is /img/signup/be0e1d34fabf2514d49db9baec09f858.png?w=198&h=198&s=9a7d22504c5ae176a936a0f18cccacba. Caught you

为什么?正则表达式不匹配,至少直观上不匹配(要么以问号结尾,后跟一系列数字,要么以.png等等结尾),当我在Regex101.com

答案1

Nginx 实际上并未匹配问号后面的部分。这些是查询参数。Nginx 仅看到路径末尾 ( .png)。由于情况如此,因此匹配得很好。

相关内容