在 Apache 中,您可以使用以下命令缓存 css 和 js 文件,并使用 Apache 的 Include mod 将它们作为单个文件提供:
<FilesMatch "\.combined\.js$">
Options +Includes
AddOutputFilterByType INCLUDES application/javascript application/json
SetOutputFilter INCLUDES
</FilesMatch>
<FilesMatch "\.combined\.css$">
Options +Includes
AddOutputFilterByType INCLUDES text/css
SetOutputFilter INCLUDES
</FilesMatch>
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L]
</IfModule>
我知道使用 nginx 可以实现这一点,但我似乎无法获得正确的语法。
-- 编辑 -- 添加一些代码
到目前为止我唯一拥有的是:
location ~* (.+)\.(?:\d+)\.(js|css)$ {
ssi on;
try_files $uri $1.$2;
}
我正在寻找能够使用combined
带有数字的关键字将所有 js 和 css 文件合并为单个文件以进行缓存清除:
style.combined.100.css
javascript.combined.100.js
- 解决方案 -
location / {
ssi on;
ssi_types *;
location ~* \.combined\.js$ {
ssi_types application/javascript application/json;
}
location ~* \.combined\.css$ {
ssi_types text/css;
}
location ~* ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ {
try_files $uri $1.$3 =404;
}
}
不确定是否安全ssi_types *;
...
答案1
我对ssi 模块,但您可以尝试以下步骤(或多或少直接重写 Apache 配置)。
location / {
location ~* \.combined\.js$ {
ssi on;
ssi_types application/javascript application/json;
}
location ~* \.combined\.css$ {
ssi on;
ssi_types text/css;
}
location ~* ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ {
try_files $uri $1.$3 =404;
}
}