【问题标题】:Apache: ExpiresDefault doesn't work, whereas "Header" does. How comes?Apache:ExpiresDefault 不起作用,而“Header”起作用。怎么会?
【发布时间】:2012-02-08 00:04:19
【问题描述】:

如果我这样做:

<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 标头修改。

我错过了什么?

顺便说一句:如果你有任何解决方案让它发挥作用,我就是你的人!

【问题讨论】:

    标签: apache httpd.conf


    【解决方案1】:

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

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

    所以它只适用于静态文件,而不适用于所有其他文件:它们不是静态的。

    【讨论】:

      【解决方案2】:

      这个也让我很困惑,因为 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 层次结构进行了grep,以确保您的ExpiresDefault 没有在较低级别被覆盖。

      如果您不希望 htaccess 文件这样做,您需要在您的 http 配置中禁用它们。

      【讨论】:

      • 我没有 htaccess 文件(高性能规则),一切都在 vhost 中,并且在 vhosts 中没有这样的指令。它们是全球性的。它们应用于虚拟主机,因为正如我在问题中强调的那样,第二个示例有效,并且它改变了 Expires。
      • @Olivier,对不起,我错过了您对 vhost 的强调,但我的观点仍然是您是否明确禁用 .htaccess 文件,以防万一您的应用程序目录/目录中存在一个文件,因为这里的任何 {ExpiresDefault} 都会覆盖你的。同上,您已经对 Apache 配置层次结构进行了 grep,以确保其他一些 {ExpiresDefault} 不会按照 [配置部分优先级] (httpd.apache.org/docs/2.2/sections.html) 覆盖您的配置。 AFAIK,这不是 Apache 错误,因此符合您提供的证据的下一个最可能的解释是优先问题。
      • 或者你指出它们是动态的。抱歉——我认为它们是静态的,因为您使用的是ExpiresDefault。如果它们是动态的,那么您的生成脚本应该主动控制缓存并发出正确的标头(例如 Date、Expires),还处理 If-Modified-Since 和 Etag 请求标头,如果未更新则发出 304 响应
      猜你喜欢
      • 1970-01-01
      • 2010-10-22
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多