Apache:ExpiresDefault 不起作用,而“Header”不起作用做。怎么来的?

发布于 2024-12-25 23:30:37 字数 750 浏览 1 评论 0原文

如果我这样做:

<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>

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

<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 为 true),
  • 应用此规则后,Expire 标头不会被修改。

我缺少什么?

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

If I do this:

<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>

It doesn't set properly the Expire header, whereas if I "force" it by hand like this:

<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>

It works. This implies 2 things:

  • mod_expire is installed (IfModule mod_expires.c is true)
  • the Expire header is not modified after this rule is applied.

What am I missing?

By the way: if you have any solution to make it work I'm your man!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

划一舟意中人 2025-01-01 23:30:37

好的,我从官方文档这里得到了它:

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

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

Ok I've got it from the official documentation here:

Note that if you use a modification date based setting, the Expires
header will not be added to content that does not come from a file on
disk. This is due to the fact that there is no modification time for
such content.

So it works only for static files, and not for all the other ones: they're not static.

硪扪都還晓 2025-01-01 23:30:37

这也让我难住了,因为据我所知,它应该可以工作,所以我在一个测试虚拟机上尝试了它,改变了 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 配置中禁用它们。

This one got me stumped as well because AFAIK, it should work so I tried it on a test VM varying the N days and refreshing. Works fine for me. My Apache version is

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

Any the headers for a test file (using chrome developer tools) (with N=15) show:

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

My thought is that any ExpiresDefault can be overridden by a Header set Expires. Have you grepped the .htaccess hierarchy to make sure that your ExpiresDefault isn't being overridden at a lower level.

If you don't want htaccess files doing this you need to disable them in your http config.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文