![在 nginx 中,如何匹配包含查询字符串的已知 mime 类型的请求?](https://linux22.com/image/698932/%E5%9C%A8%20nginx%20%E4%B8%AD%EF%BC%8C%E5%A6%82%E4%BD%95%E5%8C%B9%E9%85%8D%E5%8C%85%E5%90%AB%E6%9F%A5%E8%AF%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%B7%B2%E7%9F%A5%20mime%20%E7%B1%BB%E5%9E%8B%E7%9A%84%E8%AF%B7%E6%B1%82%EF%BC%9F.png)
我使用 nginx 静态提供资产,并将所有非资产请求路由到 PHP 前端控制器。我有一个location
如下所示的块:
location / {
include /etc/nginx/mime.types;
index index.php;
try_files $request_uri $request_uri/ /index.php?$query_string;
}
据我了解,这应该首先尝试将请求与任何已知的 MIME 类型进行匹配,如果没有找到匹配的文件,它应该尝试根据我的 PHPlocation
块(未显示)发送请求。
如果我想访问,这个方法很有效http://example.com/css/owls.css
,但如果我尝试访问http://example.com/css/owls.css?t=_423632636
,它就无法识别“扩展”,因此会尝试将请求传递到我的 PHP 入口点(当然会失败)。
我如何告诉 nginx,对(或任何其他遵循有效 MIME 类型的查询字符串)的请求http://example.com/css/owls.css?t=_423632636
应首先尝试匹配静态文件css/owls.css
?
如果该文件(没有查询字符串)不存在,那么它应该回退到 PHPtry_files
命令。
答案1
Nginx 使用下面的 try_files 行自动为我执行此操作。请注意,您使用的是 $request_uri 而不是 $uri。首先尝试更改它。
try_files $uri $uri/ /index.php?$args;
如果这不能解决您的问题,请编辑您的问题以包含整个 nginx.conf 和相关的服务器块。