如何停止在apache服务器上缓存图像


How to stop caching of images on apache server

我一直在四处寻找,以解决我的网站上需要最新版本文件的部分的缓存问题。该文件是用户可以上传的背景图像。它使用一个表单将图像上传到服务器上的某个文件夹。每次加载用户的页面时,php脚本都会将CSS回声到页面的head标记中。

我知道一些技巧,比如在图像的src属性中,在源文件的末尾添加一个随机字符串或时间戳。然而,在我的例子中没有img标记。背景图像通过css应用于包装器div:

#wrapper{
   background-image:url('dir/imagename.jpg');
}

在停止浏览器缓存方面,我尝试了以下操作:

<meta Http-Equiv="Cache-Control" Content="no-cache">
<meta Http-Equiv="Pragma" Content="no-cache">
<meta Http-Equiv="Expires" Content="0">
<meta Http-Equiv="Pragma-directive: no-cache">
<meta Http-Equiv="Cache-directive: no-cache">

该代码已添加到页面的head标记中。

我也尝试过用php:

header("Expires: Tue, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

即使在所有这些更改之后,我也必须刷新页面至少十几次才能更新图像。当通过ftp客户端或内置文件管理器下载图像时,我可以看到图像已经立即更新。因此,我得出结论,浏览器(谷歌浏览器)正在缓存这些图像,我似乎无法中断或阻止这个过程。

有什么想法吗?

您需要"取消缓存"静态资产,如图像、CSS和JavaScript。我不知道你是怎么发送这些邮件的,因为它们不是那样工作的。使用.htaccess添加此规则来告诉浏览器不要缓存.jpg.jpeg.png.gif:

<FilesMatch "'.(jpg|jpeg|png|gif)$">
Header set Expires "Tue, 01 Jan 2000 00:00:00 GMT"
</FilesMatch>