【发布时间】:2012-04-21 03:56:45
【问题描述】:
我正在使用 .htaccess 文件来设置网站的标题。我想知道在对文件进行修改后如何将文件缓存设置为过期。这可能吗?
即这行得通吗?
ExpiresDefault "modification"
换句话说,我希望缓存一直保留到从服务器修改文件为止。
【问题讨论】:
标签: .htaccess browser-cache cache-control last-modified mod-expires
我正在使用 .htaccess 文件来设置网站的标题。我想知道在对文件进行修改后如何将文件缓存设置为过期。这可能吗?
即这行得通吗?
ExpiresDefault "modification"
换句话说,我希望缓存一直保留到从服务器修改文件为止。
【问题讨论】:
标签: .htaccess browser-cache cache-control last-modified mod-expires
Expires modify 将缓存设置为在文件最后一次修改后的某个时间过期。即使您的文件在设置的缓存时间限制内再次被修改,已经缓存文件的客户端也不会寻找新版本。 Apache Expiration 包含过期模块的信息。
这是一个例子:
#BEGIN Cache-Control Headers
<ifModule mod_headers.c>
<filesMatch "\.(css|js)$">
ExpiresDefault "modification plus 4 weeks"
</filesMatch>
</ifModule>
# END Cache-Control Headers
如果您的 css 文件在 1 周前被修改,缓存将在 3 周后过期,而不是 4 周。
那么如何让新修改的 css 文件在文件被缓存后显示出来呢?
如果您修改您的 css 文件,在缓存过期之前,更改将不会显示在缓存的浏览器中。解决此问题的一种方法是更改缓存的 css 文件的名称。 (示例重命名 main1.css -> main2.css)
【讨论】:
我认为您对 expires 标头有错误的想法。 expires 头告诉接收者它可以在本地缓存文件多长时间。在这段时间之后,接收者必须重新请求资源。如果服务器说资源将在一小时后过期,但资源在一分钟后更改。接收器将需要另外 59 分钟才能获取此修改后的版本。服务器无法通知接收者资源已提前过期。
【讨论】: