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

4
我试图设置浏览器缓存Web字体长时间,并尝试通过gzip来加速下载。据我所知,您可以通过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个回答

3

ExpiresByType可以放在httpd.conf、虚拟主机配置或htaccess中,如apache文档概述框顶部每个指令条目所示:

Apache Documentation screenshot

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

上下文列表是告诉您可以将各种Apache指令类型放入哪些配置文件中的方法。
假设您正在使用PHP,您的phpinfo详细信息应该告诉您是否启用了gzip。

PHPInfo Screenshot

编辑

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

application/x-font-(extension)

我建议使用ExpiresByType来关联。我建议先使字体正常工作,然后检查字体url的头信息,看看是否给出适当的过期日期。

enter image description here

关于接收Web字体的浏览器,这篇文章似乎表明MIME类型并未被考虑,因此并不重要。但是这篇文章似乎与之相矛盾。据我所知,没有官方的字体/ MIME类型,因此任何浏览器实现都在MIME规范之外。
相关问题: 字体的适当MIME类型 字体MIME类型的正确Apache AddType指令 我没有看到任何关于.htaccess中放置要求的规定,因此您可以安全地将这些规则放在任何您认为合适的位置,尽管如果您进行AddTypes,则需要在引用该声明类型的任何进一步指令之上执行。最好将这些规则放在重写规则的顶部附近。

另外,AddOutputFilterByType也允许在htaccess中使用,因此那部分应该没问题。这里有另一个SO问题涵盖了压缩字体的例子https://dev59.com/D2HVa4cB1Zd3GeqPiwUF - WebChemist
谢谢提供信息。你有没有关于我在设置字体过期时间时发布的两个不同版本哪一个是正确的的想法?此外,你能把那段代码放在.htaccess文件的任何位置吗?比如说它是否可以放在mod rewrite规则的上方或下方都无所谓。 - Brett
非常感谢!但是有一件事我想要澄清,就是我发现我的phpinfo页面显示Gzip已启用(或接受),但是在我的httpd.conf文件中没有任何相关的内容。所以我询问了我的主机提供商,并让他们检查,他们回答说mod_deflate并未安装; 然后他们为我安装。所以我猜它们有不同的意思吧!? - Brett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接