我尝试在所有.js
文件的末尾附加一个查询字符串,而实际上并没有进行代码更改。这样做的目的是,当静态文件发生更改时,它们将从服务器而该高速缓存中被拉取,这样我们就不会有任何过时的静态文件。
所以当我的网页上写着
<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]
但我觉得它并没有完全按照我的意愿...
3条答案
按热度按时间q3aa05251#
这说不通:如果缓存的资源有过期日期,浏览器将永远不会在第一时间发出请求。
更直接的方法是为JS文件设置适当的缓存规则,如下所述:How to prevent http file caching in Apache httpd (MAMP),根据您的喜好调整
filesMatch
指示词。vc6uscn92#
这将使对文件(在本例中为所有.js文件)的请求数加倍,但在其他情况下也应该如此。
我使用目录(有效地修改文件名),而不是查询字符串,因为这是首选技术。[ 1 ][2]
首先,重定向到其他文件夹名称
用您的修订号替换
000
部分(您应该能够自动执行此操作)L标志停止处理重写,R执行HTTP重定向,使用新文件名向服务器发起第二个请求。
然后捕获使用新“文件夹”标记的请求,并使用不调用另一个请求的重写规则将它们指向原始文件(此时将忽略第一个规则)
syqv5f0l3#
好吧,我知道这个问题是旧的,但在寻找类似的东西时,我发现了两个聪明的Apache插件:
mod_pagespeed:
这个东西重写了你正在服务的html页面,并用修改过的链接替换引用的静态资源链接(CSS,JS,img)。当磁盘上的静态资源改变时,插件会为它生成一个全新的url。我猜其中包含了一些基于内容的哈希。这会该高速缓存,因为客户端将不得不发出一个新的请求。
所以原始html页面的缓存时间应该是相当短的,但是所有相关的静态资源都可以缓存极长的时间。
mod_proxy_html:
这个也可以在运行中编辑html。但它要简单得多,只提供重写链接,没有缩小和其他花哨的东西,就像mod_pagespeed一样。但有时这就是你所需要的,因为这可能意味着页面被重写破坏的风险较小。