.htaccess:缓存控制,我该如何处理网站更新?

时间:2011-02-25 18:43:31

标签: php .htaccess cache-control mod-expires

我刚刚在网上搜索过但找不到合适的答案:

FF的Google页面速​​度扩展告诉我在我的网站上缓存文件(PHP)。因此,我更新了.htaccess(在我的网站测试版区域),以便缓存某些类型的文件:

ExpiresActive On
ExpiresDefault A0
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>

在beta区域进行编码时,我注意到由于缓存控制设置,我需要按 F5 来获取最新的.css文件。这对我来说并不坏......但用户呢?

因此,当我更新我的网站(或文件过期)时,我可以告诉浏览器重新下载所有文件(如果没有),并使用缓存吗?

如果我可以告诉浏览器,那将是完美的:“嘿,更新时间之前的所有文件都是旧的,请重新下载它们 - 但是更新时间之后的文件没问题,请使用缓存。”

2 个答案:

答案 0 :(得分:6)

这是我有时使用的一种简单方法,它不需要任何复杂的配置。

每当修改css或javascript文件时,只需在标记中添加一个虚拟参数即可。我通常使用当前的日期和/或时间。例如:

<link type="text/css" rel="stylesheet" href="site.css?120911" />

这会强制浏览器在您需要更新文件时下载该文件的新副本,同时仍然允许您在幕后维护一致的文件名。

答案 1 :(得分:2)

出于性能原因,您已向浏览器表明它应该缓存文件,而不是在很长时间之前从服务器请求它。

这就是浏览器正在做的事情:使用缓存中的文件,而不是从服务器询问任何内容 - 这是正确的行为。


当您修改文件,强制浏览器重新申请并获得新版本时,您唯一的解决方案是更改其网址

通常,这是通过在文件名中集成版本号来完成的:

http://www.yoursite.com/my-file-123.css

并且,当文件更新时:

http://www.yoursite.com/my-file-124.css

由于URL已更改,浏览器的缓存中没有该文件,并从服务器请求新版本。


当然,手工完成这件事并不容易,并且容易出错......

因此,通常(如果你有一个构建脚本,从源代码控制中提取你的网站的源代码,并将它们打包生产),你将把这个过程集成到你的网站中建筑脚本。