4

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

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

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

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

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


编辑
我想使用 Far Future Expires 标头来缓存文件。

4

2 回答 2

3

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

于 2011-03-04T16:07:12.153 回答
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.css,的文件mycss.2.css。这需要更多的工作,因为您需要协调两个文件名。但更好的是,因为您不使用 PHP 发送文件(没有资源命中),您可以使用 CDN(甚至更好)并且您仍然可以利用远期过期标头。

  2. 设置Cache-Control: must-revalidate标头和适当的电子标签标头,以便304 Not Modified在内容未更改时发送标头...

于 2011-03-04T17:18:02.627 回答