静态图像不是用PHP生成的页面缓存的

时间:2010-06-14 20:02:02

标签: php browser image caching static

我们的网站刚刚转换为由mod_rewrite和php脚本生成。当它们看起来应该是在浏览器中时,图像不会缓存。

所有图片均采用以下格式:

<img src="/images/header.png" />

我必须避免脚本完全缓存,因为PHP解析器需要在每个请求上动态处理每个页面;但是,每个页面加载时,大图像的下载开销都很麻烦。

我理想情况下会为“Cache-Control:no-cache,must-revalidate”和“Expires:some_date_in_the_past”提供标题,以强制重新验证PHP脚本。

为什么浏览器不会在所有页面上缓存具有一致href值的静态图像?

1 个答案:

答案 0 :(得分:2)

您可以在.htacess文件中告诉您要应用某些标头的文件扩展名,以便为静态内容提供远期过期标头,对于动态内容,您可能希望编写缓存控制,无需缓存必须重新验证。

<IfModule mod_deflate.c>
<FilesMatch "\.(js|css|htm|php)$">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>

<IfModule mod_expires.c>
    <FilesMatch "\.(gif|jpg|jpeg|png|swf|css|js|html?|xml|txt)$">
        ExpiresActive On
        ExpiresDefault "access plus 10 years"
        ExpiresByType image/x-icon A604800
        Header set Cache-Control "max-age=290304000, public"
    </FilesMatch>
</IfModule>

就像在这个例子中一样,我已经为所有不同的静态文件匹配添加了一个远期的expires头。

请注意FileMatch标记和文件扩展名。 .htacess文件保存在应用程序内的任何文件夹中,并为该文件夹提供这些设置。