htaccess FilesMatch正则表达式版本

时间:2017-11-17 12:12:33

标签: regex .htaccess

在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

1 个答案:

答案 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]