关于.htaccess:如何防止Apache httpd(MAMP)中的http文件缓存

How to prevent http file caching in Apache httpd (MAMP)

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

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


试过这个?应该在.htaccesshttpd.confVirtualHost中工作(如果你从httpd.conf中包含它,通常放在httpd-vhosts.conf中)

1
2
3
4
5
6
7
8
9
<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% Prevent Files from being cached

This is similar to how google ads employ the header Cache-Control: private, x-gzip-ok=""> to prevent caching of ads by proxies and clients.

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

如果您使用.html以外的扩展名,则可以选择为要检索的模板文件添加扩展名。


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

以下内容可能适用于.htaccess

1
2
3
4
5
6
7
8
9
10
11
 <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>


我有同样的问题,但我在这里找到了一个很好的解决方案:
在MAMP中停止PHP 5.5.3的缓存

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


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

1
<?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看起来像:

1
<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标头。


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