在我的 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
)。由于情况如此,因此匹配得很好。