Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache Mod Rewrite将查询字符串添加到所有静态文件中,以进行缓存破坏_Apache_.htaccess_Caching_Mod Rewrite - Fatal编程技术网

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