Apache:ExpiresDefault不起作用,而“Header”则起作用。怎么会?

时间:2012-01-11 16:09:26

标签: apache httpd.conf

如果我这样做:

<IfModule mod_expires.c>
  <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4|css|js|php)$">
    ExpiresActive On
    ExpiresDefault "access plus 30 days"
  </FilesMatch>
</IfModule>

它没有正确设置Expire标头,而如果我像这样“强制”它:

<IfModule mod_expires.c>
  <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4|css|js|php)$">
    ExpiresActive On
    Header set Expires "Thu, 18 Jan 2012 20:00:00 GMT"
  </FilesMatch>
</IfModule>

有效。这意味着两件事:

  • 已安装mod_expire(IfModule mod_expires.c为真)
  • 应用此规则后,Expire标头已修改。

我错过了什么?

顺便说一下:如果你有任何解决方案让它成功,我就是你的男人!

2 个答案:

答案 0 :(得分:4)

好的,我从官方文档here获得了它:

  

请注意,如果您使用基于修改日期的设置,则过期   标题不会添加到不来自文件的内容中   磁盘。这是因为没有修改时间   这样的内容。

因此它仅适用于静态文件,而不适用于所有其他文件:它们不是静态文件。

答案 1 :(得分:0)

这个让我感到难过,因为AFAIK,它应该工作,所以我尝试了一个测试VM,改变N天和刷新。对我来说很好。我的Apache版本是

Server version: Apache/2.2.14 (Ubuntu)
Server built:   Nov 18 2010 21:17:19

测试文件的任何标题(使用chrome开发人员工具)(N = 15)显示:

Date:Mon, 09 Jan 2012 01:48:43 GMT
ETag:"7574-5-4b60e88a820a1"
Expires:Tue, 24 Jan 2012 01:48:43 GMT

我的想法是,任何ExpiresDefault都可以被Header set Expires覆盖。您是否已对.htaccess层次结构进行了操作,以确保您的ExpiresDefault未在较低级别被覆盖。

如果您不希望htaccess文件执行此操作,则需要在http配置中禁用它们。