在htaccess中需要正则表达式帮助。我需要在扩展之前用版本号捕获css和js文件。
0版本的文件没有缓存。
文件名示例: example.0.js example.0.css
大于0版本的文件有1年缓存。
文件名示例: example.1.js example.9999.css
<input type="button"
value="Register"
onclick="return regformhash(this.form,
this.form.username,
this.form.email,
this.form.password,
this.form.confirmpwd);" />
这适用于所有js和css,但我需要不同的文件缓存* .0.js和* .0.css
答案 0 :(得分:1)
您可以使用以FilesMatch
或.0.css
与.0.js
标题结尾的其他no-cache
。同时更改现有正则表达式以禁止.0.(js|css)
:
ExpiresActive On
<FilesMatch "(?<!\.0)\.(css|js)$">
ExpiresDefault "access plus 1 year"
Header append Cache-Control "public"
</FilesMatch>
<FilesMatch "\.0\.(css|js)$">
ExpiresDefault A0
Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</FilesMatch>
根据您在下面的评论,这是一个Apache 2.4解决方案,仅支持[0-9]+.(css|js)
除0.
之外的缓存:
<If "'%{THE_REQUEST}' =~ /\.[0-9]+\.(css|js)/">
ExpiresActive On
ExpiresDefault "access plus 1 year"
Header set Cache-Control "public"
</If>
<If "'%{THE_REQUEST}' =~ /\.0\.(css|js)/">
ExpiresDefault A0
Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</If>
RewriteEngine On
RewriteRule ^(.+)\.\d+\.(css|js)$ /$1.$2 [L,NC]