CSS 中的缓存破坏图像

发布于 2024-10-20 11:46:35 字数 460 浏览 6 评论 0原文

我的情况
当我包含如下 CSS 文件时,我当前正在使用缓存清除:

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

我的目标
现在我想对 CSS 文件中包含的图像执行类似的操作。

问题
问题是我无法在 CSS 文件中使用 PHP,我宁愿将 CSS 文件分开。

我的问题
如何将 filemtime() 添加到 CSS 文件内的图像,同时保持文件独立?


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

My situation

I am currently using Cache Busting when I include CSS files like this:

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

My goal

Now I would like to do something similar for the images I am including inside my CSS file.

The problem

The problem is that I cannot use PHP inside my CSS files and I would rather keep my CSS files seperated.

My question

How can I add the filemtime() to the images inside my CSS files while keeping the files seperated?

Edit

I would like to use Far Future Expires headers to cache the files.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

难得心□动 2024-10-27 11:46:35

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

You could actually rename your css files as style.css.php and then use PHP inside them. As long as the post-processing result is in the proper CSS format, it should work. I've done it in the past. I'm not sure if it's necessary, but if that gives you problems, you can use a header('Content-type...') kind of thing and ensure it's sent as a CSS file.

划一舟意中人 2024-10-27 11:46:35

要实现缓存清除,最好的方法是发送正确的标头。确保 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-标记 标头,以便在内容没有更改的情况下,它需要做的就是发送 304 Not Modified 标头...

To achieve cache-busting, the best way is to send the proper headers. Make sure Apache is configured to send a Expires: now header. So in a .htaccss file:

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

That will always force no-caching of all content in its directory and any under.

However, if you wanted to conditionally cache, what I would suggest, is doing one of a few things.

  1. Include a version number in the name of the CSS file. So you'd have a file that looks like mycss.1.css, mycss.2.css. This takes a little more work since you need to coordinate both filenames. But it's better since you aren't sending the files with PHP (no resource hit), you can use a CDN (even better) and you can still take advantage of far-future expires headers.

  2. Set the Cache-Control: must-revalidate header and a proper E-Tag header so that all it needs to do is send a 304 Not Modified header if the content didn't change...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文