我有以下 NGINX 配置:
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d; #for caching purposes
}
所有请求都发送到 index.php,并且所有具有其中一个扩展名的文件都将获得 365 天的到期标头。
在我提出类似请求之前,一切都很好。
domain.com/file.js
而且file.js并不是静态文件,而是通过index.php来处理请求,它读取REQUEST_URI的输入,并提供正确的动态js。
这一切都运行良好,除了一件事,每个扩展名在此列表中的请求:
(jpg|jpeg|png|gif|ico|css|js)
并且由 PHP 而不是实际文件处理,都会抛出 404 未找到响应标头,但会加载其实际内容。当我使用该列表之外的扩展名并让 index.php 处理输入(例如 sitemap.xml)时,它会给出 200 OK 响应标头。
这是错误日志产生的内容:
public_html/file.js" failed (2: No such file or directory)
我应该怎样修复此问题?
答案1
在你的情况下,nginx 只使用一个location
。对于 x.js,它总是忽略try_files
。尝试嵌套:
location / {
try_files $uri $uri/ /index.php?$args;
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d; #for caching purposes
}
}
答案2
如果文件内容.js
是由 PHP 脚本生成的,那么 PHP 脚本也会设置404
状态代码。nginx 不会改变 PHP 应用程序发送的状态代码。