如何防止Apache httpd(MAMP)中的http文件缓存

时间:2012-07-18 00:16:03

标签: apache .htaccess http-headers mamp

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

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

5 个答案:

答案 0 :(得分:294)

试过这个?应该同时适用于.htaccesshttpd.confVirtualHost(如果您已从httpd.conf中添加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>

.html
  

100%阻止缓存文件

     

这类似于Google广告如何使用标头Cache-Control:private,x-gzip-ok =“”&gt;防止代理和客户缓存广告。

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

如果您使用{{1}}以外的扩展程序,则可以选择添加要检索的模板文件的扩展名。

答案 1 :(得分: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>

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

没有mod_expires ,在文件上设置过期标头会更加困难。对于生成的任何内容,您当然可以在答案上设置一些默认标题,像这样执行mod_expires的工作:

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

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

现在这不适用于静态文件,就像您的javascript文件一样。对于静态文件,浏览器和源文件之间只有apache(没有任何过期模块)。 为了防止在您的浏览器上缓存javascript文件,您可以在js url的末尾使用随机令牌,类似于?rd=45642111,因此网址如下所示:< / p>

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

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

修改

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

答案 4 :(得分:0)

<FilesMatch "\.(js|css)$">
  ExpiresActive On
  ExpiresDefault A1
  Header append Cache-Control must-revalidate
</FilesMatch>