【问题标题】:Mod Rewrite to add query string to all static files for cache bustingMod Rewrite 将查询字符串添加到所有静态文件以进行缓存破坏
【发布时间】:2014-01-23 04:23:24
【问题描述】:

我正在尝试将查询字符串附加到所有 .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]

但我认为它并没有达到我想要的效果......

【问题讨论】:

  • 如果资源被缓存并带有过期日期,浏览器将永远不会首先发出请求。为什么不简单地设置缓存规则呢?
  • @Pekka웃:提问者可能不明白缓存规则是如何实际应用的——你可能想在答案中解释一下。
  • @Qantas 是的,正在寻找链接
  • 我不想不缓存它们,也不想将它们设置为在一定时间后过期。我会将它们设置为永不过期,并且当文件更改时,服务器将有效地更改它们的名称并重新缓存新文件。类似于 force-reload-css-javascript-unique-filenames 的东西,但没有在 html 中进行所有更改。只是进行 apache 更改。

标签: apache .htaccess caching mod-rewrite


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    首先,重定向到不同的文件夹名称

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

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

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

    然后捕获使用新“文件夹”标记的请求,并使用不调用另一个请求的重写规则将它们指向原始文件(您的第一个规则将在这段时间内传递)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      相关资源
      最近更新 更多