Mod Rewrite将查询字符串添加到所有静态文件以进行缓存清除

时间:2013-09-26 01:43:13

标签: apache .htaccess caching mod-rewrite

我正在尝试将查询字符串附加到所有.js文件的末尾,而不会实际更改代码。这样做的目的是在更改静态文件时从服务器而不是缓存中提取静态文件,这样我们就没有任何陈旧的静态文件。

所以当我的html说

<script type="text/javascript" src="file1.js">

我希望它实际上拉

<script type="text/javascript" src="file1.js?v=1">

来自服务器。这可能吗?

到目前为止,我有:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^(.*)\.js$ /$1.js?v=1 [L,R]

但我认为这不是我想要的......

2 个答案:

答案 0 :(得分:0)

这没有意义:如果资源缓存有失效日期,浏览器将永远不会首先发出请求。

更直接的方法是为JS文件设置适当的缓存规则,如下所示:How to prevent http file caching in Apache httpd (MAMP),根据自己的喜好调整filesMatch指令。

答案 1 :(得分:0)

这将使文件的请求数量增加一倍(在这种情况下为所有.js文件),但它应该可以正常工作。

我正在使用目录(有效修改文件名),而不是查询字符串,因为这是首选技术。 [1] [2]

首先,重定向到其他文件夹名称

ReWriteRule ^(.*\.js)$ /rev/000/$1 [L,R]

000部分替换为您的修订号(您应该可以自动执行此操作)

L标志停止处理重写,R执行HTTP重定向,使用新文件名向服务器发起第二个请求。

然后捕获使用新“文件夹”标记的请求,并使用不会调用其他请求的重写规则将它们指回原始文件(此时第一个规则将被传递)

ReWriteRule ^/rev/[0-9]+/(.*)$ $1