如何防止在 Apache httpd (MAMP)中进行 http 文件缓存

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

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

208667 次浏览

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

如果没有 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 请求的无缓存设置的基础。浏览器永远不会认为两个拥有不同查询字符串的 URL 是相同的,也永远不会使用缓存版本。

剪辑

请注意,您还应该测试 Mod _ headers。如果你有 mod _ headers,你也许可以直接用 关键字设置 Exires Header。

试过这个吗?应该在 .htaccesshttpd.confVirtualHost中都可以工作(如果从 httpd.conf 中包含 httpd-vhosts.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% 防止缓存文件

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

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

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

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

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

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