148

我正在 MAMP 中开发单页 Javascript 应用程序。我的 JavaScript 和 HTML 模板文件在请求之间被缓存。

有没有一种简单的方法可以在 MAMP 中指示我想阻止 http 文件缓存?可能有.htaccess文件?我在哪里放置.htaccess或修改 Mac 上 MAMP 的虚拟主机?

4

5 回答 5

331

试过这个?应该同时在 和 a 中工作.htaccesshttpd.conf如果您从 httpd.conf 中包含它,VirtualHost通常放置在其中)httpd-vhosts.conf

<filesMatch "\.(html|htm|js|css)$">
  FileETag None
  <ifModule mod_headers.c>
     Header unset ETag
     Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
     Header set Pragma "no-cache"
     Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
  </ifModule>
</filesMatch>

100% 防止文件被缓存

这类似于谷歌广告如何使用标头 Cache-Control: private, x-gzip-ok="" > 来防止代理和客户端缓存广告。

来自http://www.askapache.com/htaccess/using-http-headers-with-htaccess.html

如果您使用的扩展名不是.html那些,则可以选择为您正在检索的模板文件添加扩展名。

于 2012-07-30T15:30:20.743 回答
5

基于此处的示例:http: //drupal.org/node/550488

以下内容可能适用于 .htaccess

 <IfModule mod_expires.c>
   # Enable expirations.
   ExpiresActive On

   # Cache all files for 2 weeks after access (A).
   ExpiresDefault A1209600

  <FilesMatch (\.js|\.html)$>
     ExpiresActive Off
  </FilesMatch>
 </IfModule>
于 2012-07-18T00:35:31.900 回答
3

我有同样的问题,但我在这里找到了一个很好的解决方案: Stop caching for PHP 5.5.3 in MAMP

基本上找到 php.ini 文件并注释掉 OPCache 行。我希望这个替代答案也能帮助其他人。

于 2014-01-02T20:15:03.723 回答
2

如果没有 mod_expires,就很难在文件上设置过期标头。对于生成的任何内容,您当然可以在答案上设置一些默认标题,像这样完成 mod_expires 的工作:

<?php header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 3600)); ?>

(取自:@brianegge 的 Stack Overflow 答案,其中还解释了 mod_expires 解决方案)

现在这不适用于静态文件,例如您的 javascript 文件。至于静态文件,浏览器和源文件之间只有 apache(没有任何过期模块)。为了防止在浏览器上缓存 javascript 文件,您可以在 js url 的末尾使用随机标记?rd=45642111,例如,因此 url 如下所示:

<script type="texte/javascript" src="my/url/myjs.js?rd=4221159546">

如果页面上的这个 url 是由 PHP 文件生成的,您可以简单地使用 PHP 添加随机部分。这种通过简单地附加随机查询字符串参数来随机化 url 的方式是 ajax jQuery 请求的无缓存设置的基础。浏览器永远不会认为具有不同查询字符串的 2 个 url 是相同的,并且永远不会使用缓存版本。

编辑

请注意,您还应该测试mod_headers。如果你有 mod_headers 你可以直接使用Header关键字设置 Expires 标题。

于 2012-07-25T11:59:45.333 回答
1
<FilesMatch "\.(js|css)$">
  ExpiresActive On
  ExpiresDefault A1
  Header append Cache-Control must-revalidate
</FilesMatch>
于 2019-09-03T06:26:42.580 回答