通过 .htaccess 设置过期标头和压缩数据

Posted

技术标签:

【中文标题】通过 .htaccess 设置过期标头和压缩数据【英文标题】:Setting expire headers and gzipping data via .htaccess 【发布时间】:2012-10-31 05:16:11 【问题描述】:

我正在尝试对其进行设置,以便浏览器长期缓存网络字体,并尝试将它们压缩以加快下载速度。

据我所知,您可以通过 Apache 中的 httpd.conf 文件或通过 .htaccess 执行此操作。

虽然我不确定如何判断 gzip 是否启用,但我阅读了一些关于在您的 httpd.conf 文件中搜索 DEFLATE 的内容;我这样做了,但什么也没找到 - 所以不确定它是否已启用!?

不管怎样,我已经把下面的代码放到了.htaccess 文件中,部分原因是我不知道将它放在 httpd.conf 文件中的哪个位置,部分原因是在 .htaccess 文件中进行更改更容易而不用打扰我持续主持。

这是代码..

# Add correct content-type for fonts
AddType application/vnd.ms-fontobject .eot
AddType font/ttf .ttf
AddType font/otf .otf
AddType font/x-woff .woff
AddType image/svg+xml .svg

# Compress compressible fonts
AddOutputFilterByType DEFLATE font/ttf font/otf image/svg+xml

# Add a far future Expires header for fonts
ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType font/otf "access plus 1 year"
ExpiresByType font/x-woff "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"

现在,我想知道这是否正确,因为我也看到了类似但不同的到期代码..

ExpiresByType application/x-font-ttf "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType application/x-font-woff "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"

将它放在.htaccess 文件中的哪个位置是否重要,或者它可以放在任何地方?

【问题讨论】:

【参考方案1】:

ExpiresByType 可以进入您的 httpd.conf、virtualhost 配置或 htaccess,如每个指令条目顶部的 apache 文档概述框所示:

http://httpd.apache.org/docs/2.2/mod/mod_expires.html#expiresbytype

上下文列表是您如何知道可以将各种 Apache 指令类型放入哪些配置文件的方法。

假设您使用的是 php,您的 phpinfo 详细信息应该会告诉您是否启用了 gzip。

编辑

针对您关于字体的正确 MIME 类型的问题,就它们与 Apache 服务器的文件关联而言,我的 mime.types 文件(位于您的 httpd.conf 所在的 apache conf 文件夹中)告诉我

application/x-font-(extension)

将是与 ExpiresByType 一起使用的关联。我建议先让字体工作,然后检查字体 url 的标题,看看它是否给出了正确的到期日期。

对于接收网络字体的浏览器,this article 似乎表明不考虑 MIME 类型,因此无关紧要。但是this one 似乎与此相矛盾。据我了解,没有官方字体/ MIME 类型,因此任何浏览器实现都超出了 MIME 规范。

相关问题:

Proper MIME type for fonts

Correct Apache AddType directives for font MIME types

我没有在 .htaccess 中看到任何指定放置要求的内容,因此您应该安全地将这些规则放在您认为合适的任何地方,尽管如果您执行 AddTypes,您需要在引用该声明的 Type 的任何其他指令之上执行此操作。最好将它们放在重写规则上方的顶部附近。

【讨论】:

htaccess 中也允许 AddOutputFilterByType,所以这部分应该没问题。这是另一个涉及 gzipping 字体的 SO 问题***.com/questions/9506347/… 感谢您的信息。关于我在字体设置过期时发布的两个不同版本,您是否知道哪个版本是正确的?您还可以将该代码放在 .htaccess 中的任何位置吗?例如,如果它高于或低于 mod 重写并不重要。 非常感谢!我确实想澄清的一件事是,我发现我的 phpinfo 页面说我确实启用了 gzip (或接受)但在我的 httpd.conf 文件中没有任何关于它的内容,所以我让我的主机检查它,他们说没有安装mod_deflate;然后他们继续为我安装。所以我猜他们是不同的意思!?

以上是关于通过 .htaccess 设置过期标头和压缩数据的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Apache 在图像上设置过期标头

通过 .htaccess 文件为所有 PHP 脚本设置 HTTP 标头

使用 htaccess 在标头内设置文件名

通过.htaccess文件用Gzip压缩所有web内容。

如何仅在 HTTPS 上从 .htaccess 设置 HSTS 标头 [关闭]

使用.htaccess为每个请求添加标头