You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache如何通过单个LocationMatch动态设置字体文件MIME类型

Apache单规则动态匹配字体MIME类型配置方案

需求说明

需要根据文件后缀自动匹配对应字体MIME类型,映射规则如下:

  • /{path}/alpha.woff → font/woff
  • /{path}/beta.woff2 → font/woff2
  • /{path}/gamma.ttf → font/ttf
    要求仅使用一条LocationMatch配置项实现,无需为每类后缀单独编写规则。

报错原因

之前使用命名捕获组时抛出Unrecognized header format %错误,是因为Header set指令默认不会解析环境变量占位符,需要显式开启表达式解析支持,或使用规范的环境变量读取格式。

可用配置

Apache 2.4+ 推荐方案(最简洁)

直接在Header指令中增加expr=1参数,告知Apache将头值作为表达式解析,即可正确读取正则命名捕获组生成的MATCH_FONTTYPE变量:

<LocationMatch "\.(?<fonttype>(?i:woff|woff2|ttf))$">
    Header set Content-Type "font/%{env:MATCH_FONTTYPE}" "expr=1"
</LocationMatch>

配置说明:

  • 正则中(?i:)前缀表示不区分大小写匹配后缀,.WOFF、.Woff2这类大小写混合的文件也能正常识别
  • 单条规则覆盖三类字体文件,无需重复编写匹配块

低版本兼容方案(适配Apache 2.2及以下)

如果使用较低版本Apache,可以借助mod_rewrite手动设置环境变量,再由Header指令读取:

<LocationMatch "\.(?i:woff|woff2|ttf)$">
    RewriteEngine On
    RewriteRule "\.(woff|woff2|ttf)$" "-" [E=CUSTOM_FONTTYPE:$1,NC]
    Header set Content-Type "font/%{CUSTOM_FONTTYPE}e"
</LocationMatch>

注意:使用该方案需要提前启用mod_rewrite模块,%{变量名}e是Header指令读取环境变量的标准格式。

内容的提问来源于stack exchange,提问作者Vivek Dhiman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:36:20