apache通过rewritecond读取%{http_host}变量进行文本匹配,不解析dns;支持单域名跳转、多域名or匹配、子域名提取路由、ip/空host过滤等场景。
apache 通过 rewritecond 判断请求域名是否匹配,核心是读取 %{http_host} 变量,并用正则表达式或字符串比较方式进行判定。它不解析 dns 或做网络校验,只对客户端发起请求时携带的 host 请求头做文本匹配。
匹配指定域名(含 www 或非 www)
常见场景是统一入口、强制跳转或分流。例如,只允许 www.example.com 访问,其他 Host 全部重定向:
-
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]——!表示“不匹配”,[NC]忽略大小写 -
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]—— 匹配后执行 301 跳转
匹配多个域名中的任意一个
当服务需响应多个合法域名(如主站 + 备用域名 + 国际站),可用 OR 标志串联条件:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
RewriteCond %{HTTP_HOST} ^example\.com$ [NC,OR]RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC,OR]RewriteCond %{HTTP_HOST} ^en\.example\.com$ [NC]-
RewriteRule ^ - [E=VALID_HOST:1]—— 匹配任一即设置环境变量,供后续规则使用
提取子域名或二级域做逻辑处理
利用正则捕获组可提取关键部分,用于路由或打标。例如,把 api.example.com 和 admin.example.com 分发到不同后端:
-
RewriteCond %{HTTP_HOST} ^([a-z]+)\.example\.com$ [NC]—— 捕获子域名到%1 -
RewriteCond %1 ^api$—— 判断捕获值是否为 api RewriteRule ^/(.*)$ http://api-backend/$1 [P,L]
排除 IP 直连或空 Host 头等异常情况
生产环境中常需过滤非法 Host 请求,防止恶意构造或未绑定域名的访问:
-
RewriteCond %{HTTP_HOST} ^$—— Host 头为空(如直接用 IP 访问且未带 Host) -
RewriteCond %{HTTP_HOST} ^\d+\.\d+\.\d+\.\d+$—— Host 是纯 IP 地址 -
RewriteCond %{HTTP_HOST} !^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$—— 不符合基本域名格式 - 搭配
RewriteRule ^ - [F]返回 403 禁止访问










