使用Apache关闭特定文件的缓存

22

我在一个网站上有一个页面,它使用random()的twig,在Firefox和Chrome中,它因为页面加载后立即被缓存而无法工作。

有没有一种方法可以通过Apache配置关闭特定文件的缓存,例如default.html,或者更好地说,只关闭该文件的脚本部分的缓存,但保留图像文件的缓存?

我已经尝试过.htaccess但是这并不起作用。

目前唯一允许脚本工作的方法是通过PHP头全局禁用缓存:

<?php
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache');
?>

但是,因为我只需要关闭单个页面的缓存,所以关闭所有缓存似乎太过荒谬。

1个回答

45

弄清楚了,要针对特定文件(在本例中为index.php),请将此代码添加到.htaccess底部。

<Files index.php>
FileETag None
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"
</Files>

或者,如果想要特定选择缓存的文件,例如我只想缓存图像而不是其他任何文件(与html、htm、js、css、php匹配的文件将不会被缓存):

<filesMatch "\.(html|htm|js|css|php)$">
FileETag None
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"
</filesMatch>

为了检查.htaccess是否被读取,我在底部输入了几行无意义的文字,发现它没有被读取,将它从htaccess更名为.htaccess,然后它就起作用了。


那个特定页面上调用的图片怎么样?它们还会被缓存吗? - Malachi
我们可以将两个文件用逗号分隔吗? - User
我认为当使用Cache-Control "max-age ..."时,Expires被忽略了。请参考:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires - BairDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接