2012-07-18 132 views
112

我正在MAMP中开发单页面Javascript应用程序。我的JavaScript和HTML模板文件正在请求之间缓存。如何防止Apache httpd(MAMP)中的http文件缓存

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

回答

258

试过吗?被缓存在这两个.htaccesshttpd.conf并在VirtualHost应该工作(通常放在httpd-vhosts.conf,如果你已经从你的httpd.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%防止文件

这类似于谷歌广告如何使用头缓存控制:私人,x-gzip-ok =“”>来防止代理和客户端对广告进行缓存。

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

还可以选择添加的扩展你,如果你使用的不是.html那些其他的扩展检索模板文件。

+2

谢谢,这在.htaccess文件中工作得很好。当我检查标题时,我可以看到缓存控制选项,并且我的文件在请求之间显示为http 200而不是304,正是我所需要的。 – dmck 2012-07-30 22:26:46

+2

不要忘记添加LoadModule命令。 'LoadModule headers_module lib/modules/mod_headers.so' – Spen 2014-09-22 14:24:40

+1

它在Apache/2.4.12(Ubuntu)中不起作用 – Sarath 2015-04-06 13:55:44

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> 
+0

不幸的是,当我将.htaccess文件放入我的项目目录时,这不起作用。我不确定mod_expires是否处于活动状态。 – dmck 2012-07-24 00:37:01

+4

@dmck:删除''和''部分..如果mod_expires没有启用,你会得到一个错误,而不是那些悄悄被忽略的指令。 – Stennie 2012-07-28 13:15:21

+0

在项目目录中,这里任何轻微的语法错误都可能导致500错误。 – SDsolar 2017-10-27 15:21:24

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网址的结尾,像?rd=45642111使用随机令牌,所以URL看起来像:

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

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

编辑

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

+0

谢谢,不幸的是我没有使用任何PHP文件。我将研究mod_headers并安装mod_expires。 – dmck 2012-07-25 19:28:21

3

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

基本上找到php.ini文件并注释掉OPCache线。 我希望这个替代答案也可以帮助别人。

+2

这是关于服务器端的PHP缓存,又名OPCache。问题是关于通过HTTP请求的浏览器缓存的文件。 – Flion 2016-01-30 17:56:22

-1

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

+0

有什么变化?也许这应该是对另一个答案的评论。 – isherwood 2016-12-09 03:47:07

+0

我的歉意,你100%正确。我相信这与它上面的答案(来自@acarito)有关,但在这一点上,我实在不确定。如果您最终尝试并确认其确实与此相关,那么我很乐意将其删除并添加为评论。与此同时,我认为值得将它留在这里,以防止它涉及到不同的答案,并最终帮助与其中一个人进行斗争的人。 – Danny 2016-12-09 20:45:55