Apache Mod Rewrite将查询字符串添加到所有静态文件中,以进行缓存破坏
我试图在所有Apache Mod Rewrite将查询字符串添加到所有静态文件中,以进行缓存破坏,apache,.htaccess,caching,mod-rewrite,Apache,.htaccess,Caching,Mod Rewrite,我试图在所有.js文件的末尾追加一个查询字符串,而实际上不进行代码更改。这样做的目的是当静态文件被更改时,从服务器而不是缓存中提取静态文件,这样我们就不会有任何过时的静态文件 所以当我的html显示 <script type="text/javascript" src="file1.js"> 但我认为它并没有达到我希望它达到的目的…这没有意义:如果资源被缓存并带有过期日期,浏览器将永远不会首先发出请求 更为严格的方法是为JS文件设置适当的缓存规则,如下所述:,根据您的喜好调整fil
.js
文件的末尾追加一个查询字符串,而实际上不进行代码更改。这样做的目的是当静态文件被更改时,从服务器而不是缓存中提取静态文件,这样我们就不会有任何过时的静态文件
所以当我的html显示
<script type="text/javascript" src="file1.js">
但我认为它并没有达到我希望它达到的目的…这没有意义:如果资源被缓存并带有过期日期,浏览器将永远不会首先发出请求
更为严格的方法是为JS文件设置适当的缓存规则,如下所述:,根据您的喜好调整
filesMatch
指令。这将使文件请求数(本例中为所有.JS文件)增加一倍,但在其他情况下应该可以工作
我使用的是目录(有效地修改文件名),而不是查询字符串,因为这是首选技术。[][]
首先,重定向到其他文件夹名称
ReWriteRule ^(.*\.js)$ /rev/000/$1 [L,R]
用您的修订号替换000
零件(您应该能够自动执行此操作)
L标志停止处理重写,R执行HTTP重定向,使用新文件名向服务器发起第二个请求
然后捕获使用新“文件夹”标记的请求,并使用不调用另一个请求的重写规则将它们指向原始文件(您的第一个规则将在这次传递)
如果缓存的资源具有过期日期,浏览器将永远不会首先发出请求。为什么不干脆正确设置缓存规则呢?@Pekka웃: 提问者可能不理解缓存规则是如何实际应用的-您可能想在回答中解释这一点。@Qantas是的,在寻找链接的过程中,我不想不缓存它们,也不想将它们设置为在一定时间后过期。我会将它们设置为永不过期,当文件被更改时,服务器会有效地更改它们的名称并重新缓存新文件。类似于此,但没有在html中进行所有更改。只是做一个apache的改变。
RewriteEngine on
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)\.js$ /$1.js?v=1 [L,R]
ReWriteRule ^(.*\.js)$ /rev/000/$1 [L,R]
ReWriteRule ^/rev/[0-9]+/(.*)$ $1