如何使用.htaccess提供gzip压缩的字体文件?(无mod gzip或deflate)

3

以下是我随机尝试的一些东西清单:

AddHandler application/x-httpd-php .otf
AddType
default_mimetype
auto_prepend_file = "otf.php"
zlib.output_compression = On
output_handler = ob_gzhandler
header("Content-type: application/octet-stream");

尽管服务器的所有PHP文件都使用zlib进行gzip压缩,但将.otf扩展名替换为.php也没有起作用。

1个回答

4

使用.htaccess,您可以这样做,假设字体文件为fontfile.otf.gz,浏览器将请求该文件名为fontfile.otf

RewriteEngine On

#Check for browser's Accept-Encoding, remove it for force return gzipped one
RewriteCond "%{HTTP:Accept-Encoding}" "gzip.*deflate|deflate.*gzip"

#check file name is endswith otf
RewriteCond %{REQUEST_FILENAME} "\.(otf)$"

#check existance of .gz file name
RewriteCond %{REQUEST_FILENAME}.gz -s

#rewrite it to .otf.gz
RewriteRule ^.*$ %{REQUEST_URI}.gz [L]

#update some response header
<FilesMatch "\.otf\.gz$">
    AddEncoding gzip .gz
    ForceType "text/plain"
</FilesMatch>

如果字体文件和网站不在同一个域中,您需要添加 Access-Control-Allow-Origin,否则火狐浏览器将无法加载跨域的 字体对象.

在 Gecko 中,除非使用 HTTP 访问控制来放宽限制,否则 Web 字体受到相同的域限制(字体文件必须与使用它们的页面位于同一域上)。

Header set Access-Control-Allow-Origin *

谢谢回答//我复制粘贴并尝试了一下//它不起作用(字体没有被压缩)//使用Firefox 3.5上的Firebug进行检查//强制类型也不起作用(改为application/vnd.oasis.opendocument.formula-template)//我需要替换REQUEST_FILENAME还是REQUEST_URI? - Knu
你可以在这里使用 Firebug 查看此页面 - http://test.my-mm.org/font/embed.htm。它能够正常工作,我正在我的博客中以类似的方式使用它。 - YOU
好的,我已经对我的字体进行了预先gzip压缩,现在它可以使用了!非常感谢!// 但你并没有真正回答我的问题(我想让服务器实时gzip压缩)// 所以如果您不介意,我会等其他用户回答后再接受您的解决方案// 离题一点 - 你知道一个好的gzip程序吗?(最大压缩) - Knu
据我所知,动态gzip压缩是由mod gzip或mod deflate完成的,你在标题中提到(没有mod gzip或deflate),可能这就是为什么其他人没有回答的原因。 - YOU
你说得对,我的问题表述可能不太清楚。另外,正确的ForceType应该是“font/opentype”。 - Knu
显示剩余4条评论

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