缓存在CSS中打破图像

时间:2011-03-04 16:04:16

标签: php css cache-control filemtime

我的情况 我正在使用Cache Busting,当我包含这样的CSS文件时:

echo "<link href='stylesheet.css?" . filemtime('stylesheet.css') . "' />"

我的目标是 现在我想对我在CSS文件中包含的图像做类似的事情。

问题 问题是我不能在我的CSS文件中使用PHP,我宁愿保持我的CSS文件分离。

我的问题 如何在保存文件分隔的同时将filemtime()添加到CSS文件中的图像中?


修改
我想使用Far Future Expires标头来缓存文件。

2 个答案:

答案 0 :(得分:3)

您实际上可以将css文件重命名为style.css.php,然后在其中使用PHP。只要后处理结果采用适当的CSS格式,它就应该有效。我过去做过。我不确定是否有必要,但如果这给你带来问题,你可以使用标题('Content-type ...')这样的东西,并确保它作为CSS文件发送。

答案 1 :(得分:2)

要实现缓存清除,最好的方法是发送正确的标头。确保Apache配置为发送Expires: now标头。所以在.htaccss文件中:

Header always set Cache-Control "no-store, no-cache, must-revalidate"
Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT"

这将始终强制对其目录中的所有内容进行无缓存。

但是,如果你想要有条件地缓存,我建议的是做一些事情。

  1. 在CSS文件的名称中包含版本号。所以你的文件看起来像mycss.1.cssmycss.2.css。由于您需要协调两个文件名,因此需要更多工作。但是它更好,因为你没有发送带有PHP的文件(没有资源命中),你可以使用CDN(甚至更好),你仍然可以利用远期的过期标题。

  2. 设置Cache-Control: must-revalidate标头和正确的E-Tag标头,以便在内容未发生变化时,只需发送304 Not Modified标头即可... < / p>