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