在 nginx 中,如何匹配包含查询字符串的已知 mime 类型的请求?

在 nginx 中,如何匹配包含查询字符串的已知 mime 类型的请求?

我使用 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 和相关的服务器块。

相关内容