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

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

有一个简单的方法来表明,我想要防止http文件cachingMAMP吗? 可能与一个.htaccess文件? 在Mac上,我在哪里放置.htaccess或修改MAMP的虚拟主机?

试过这个? 应该在.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> 

100%防止文件被caching

这与Google广告如何使用头caching控制:private,x-gzip-ok =“”>来防止代理和客户端对广告进行caching类似。

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

如果您正在使用除.html其他扩展名,则可以为要检索的模板文件添加扩展名。

基于这里的例子: 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> 

我有同样的问题,但我find了一个很好的解决scheme: 在MAMP停止PHP 5.5.3的caching

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

如果没有mod_expires ,将很难在文件上设置到期标题。 对于生成的任何东西,你当然可以在答案上设置一些默认标题,做这样的mod_expires的工作:

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

(取自: 来自@brianegge的堆栈溢出答案 ,其中还解释了mod_expires解决scheme)

现在这不适用于静态文件 ,比如你的javascript文件。 至于静态文件,浏览器和源文件之间只有apache(没有过期模块)。 为了防止在浏览器上完成JavaScript文件的caching,可以在js url的末尾使用一个随机标记 ,如?rd=45642111 ,这样的url如下所示:

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

如果页面上的这个URL是由PHP文件生成的,那么您可以简单地使用PHP添加随机部分。 这种通过简单地附加随机查询string参数来随机化url的方式,就是以ajax jQuery请求的no-cache设置为例。 浏览器永远不会考虑具有不同查询string的2个url是相同的,并且永远不会使用caching的版本。

编辑

请注意,你应该alostestingmod_headers 。 如果你有mod_headers,你可以用Header关键字直接设置Expires头文件

FWIW我必须在更改生效之前重新启动php-fpm。 重新启动Apache是​​不够的。 把头发拉出来一会儿。