我将服务器管理软件 plesk 与 apache 和 nginx 一起使用。我在 apache 和 nginx 中为 javascript 文件设置了一个过期的标头一年。那行得通。我可以在标题中看到“过期”的一年。
现在我想通过重写(无重定向)访问 javascript 和 php 文件。
阿帕奇
ExpiresActive On
ExpiresByType text/javascript A31556952
RewriteEngine On
RewriteRule fake/(.+\.(?:js|php))$ original/$1 [L]
NGINX
location ~* ^/(.*\.js)$ {
try_files $uri @fallback;
expires 1y;
add_header Cache-Control "public";
}
该 RewriteRule 正在工作。我可以访问这些文件,但是“fake/file.js”中的“expires”标头消失了。我究竟做错了什么?
example.com/original/file.js = 一年后到期
example.com/fake/file.js = 没有过期标头
解决方案 所有静态文件通常由 NGINX 处理,而不是 apache。所以在 apache 中为 javascript 设置这一行给它一个缓存。
标头集 Cache-Control "max-age=31556952, public"
RewriteRule 中的标志 [L] 必须停止 nginx 处理静态文件,并且忽略 ExpiresByType。