Apache RewriteCond 支持通过 %{HTTP:HeaderName} 匹配请求头,大小写不敏感但需保留连字符;推荐使用原始格式如 %{HTTP:User-Agent},特殊字符头可用下划线替代;可结合 RewriteRule 实现重定向、代理或屏蔽等逻辑。

Apache 的 RewriteCond 可以通过 %{HTTP:HeaderName} 变量匹配请求头(Request Headers),比如 User-Agent、Referer、X-Forwarded-For 等。注意大小写不敏感,但 Header 名中连字符需保持原样(如 X-Real-IP 不能写成 X_REAL_IP)。
匹配常见请求头的写法
Header 名需去掉空格和下划线,用驼峰或原始格式均可,Apache 内部会自动标准化。推荐使用原始 HTTP 头格式(含连字符):
-
RewriteCond %{HTTP:User-Agent} Firefox→ 匹配 UA 含 "Firefox" -
RewriteCond %{HTTP:Referer} ^https?://example\.com/→ 匹配来自 example.com 的 Referer(注意点号转义) -
RewriteCond %{HTTP:X-Forwarded-For} ^192\.168\.1\.→ 匹配内网 IP 开头的转发来源 -
RewriteCond %{HTTP:Accept-Language} ^zh→ 匹配语言首选项为中文
特殊 Header 名的注意事项
某些 Header 名含特殊字符(如 Content-Type),Apache 允许直接写,但更稳妥的方式是用下划线替代连字符(Apache 自动映射):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
%{HTTP:Content_Type}和%{HTTP:Content-Type}效果相同 -
%{HTTP:X-Requested-With}推荐保持连字符写法,兼容性更好 - 自定义 Header 如
X-Api-Key,直接写%{HTTP:X-Api-Key}即可
结合 RewriteRule 使用示例
条件满足后重定向或返回状态码:
- 屏蔽特定爬虫:
RewriteCond %{HTTP:User-Agent} Baiduspider|YandexBot [NC]RewriteRule ^ - [F] - 根据请求头切换后端:
RewriteCond %{HTTP:X-Env} ^staging$RewriteRule ^/api/(.*)$ http://staging-api/$1 [P,L]
调试技巧
若匹配不生效,可先用 LogLevel alert rewrite:trace3 查看重写日志;也可临时用 RewriteRule ^ - [E=DEBUG_HEADER:%{HTTP:User-Agent}] 把值注入环境变量,再用 Header set X-Debug "%{DEBUG_HEADER}e" 输出到响应头验证。

















