NGINX 伪造 js 文件到 PHP 给出 404 但加载内容

NGINX 伪造 js 文件到 PHP 给出 404 但加载内容

我有以下 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 应用程序发送的状态代码。

相关内容