Last-Modified不适用于.htaccess

时间:2010-10-20 21:54:01

标签: apache .htaccess header http-headers httpd.conf

我正在实施浏览器缓存,并遵循Google PageSpeed关于将Last-Modified设置为“过去足够远”的数据的建议。我的.htaccess中有以下内容:

<IfModule mod_headers.c>
 <FilesMatch "\.(json|pdf|swf|bmp|gif|jpeg|jpg|png|svg|tiff|ico|flv|js)$">
  Header Set Last-Modified "Fri, 01 Jan 2010 12:00:00 GMT"
 </FilesMatch>
</IfModule>

我的服务器上安装了mod_headers。

不幸的是,Google PageSpeed仍抱怨并警告我:

Leverage browser caching

The following cacheable resources have a short freshness lifetime. Specify an expiration at least one week in the future for the following resources:

然后列出PNG,GIF,JPG等.Yahoo YSlow说的基本相同。

查看我应该缓存的一个资源的响应头,我看到了:

Date:           Tue, 19 Oct 2010 20:12:04 GMT
Server:         Apache/2.2.14 (Ubuntu)
Last-Modified:  Tue, 07 Sep 2010 23:51:33 GMT
Etag:           "2e0e34-2a43-48fb413a96a20"
Accept-Ranges:  bytes
Content-Length: 10819
Content-Type:   image/png

如您所见,Last-Modified数据与我在.htaccess中指定的数据不匹配。

任何想法我做错了什么?

3 个答案:

答案 0 :(得分:7)

删除Last-Modified并不是Google PageSpeed所要求的。当浏览器要求提供静态文件时,它希望在服务器响应中看到以下标题:

Cache-Control max-age=...
Expires ...

代替点,服务器将放置值。

为了做到这一点,您只需要在.htaccess添加以下行:

<IfModule mod_headers.c>
 <FilesMatch "\.(json|pdf|swf|bmp|gif|jpeg|jpg|png|svg|tiff|ico|flv|js)$">
  ExpiresActive On
  ExpiresDefault "access plus 1 year"
  Header append Cache-Control "public"
 </FilesMatch>
</IfModule>

你会看到谷歌PageSpeed停下来抱怨。

答案 1 :(得分:2)

您是否考虑过使用未设置的Last-Modified?

示例:

<IfModule mod_headers.c>
 <FilesMatch "\.(json|pdf|swf|bmp|gif|jpeg|jpg|png|svg|tiff|ico|flv|js)$">
  Header unset Last-Modified
 </FilesMatch>
</IfModule>

FilesMatch部分看起来很好,所以它可能只是Header Set的一些小问题。地狱,甚至可能是区分大小写的。请尝试使用Header set代替Header Set

如果这不是您想要的,请告诉我,我会再考虑一下。但是,Unset应该可以正常工作,

答案 2 :(得分:0)

这有效:

<IfModule mod_expires.c>
# Enable expirations
ExpiresActive On 
# Default directive
ExpiresDefault "access plus 1 month"
# My favicon
ExpiresByType image/x-icon "access plus 1 year"
# Images
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
# CSS
ExpiresByType text/css "access 1 month"
# Javascript
ExpiresByType application/javascript "access plus 1 year"
</IfModule>