<p>在 RewriteCond 的 condPattern 中,需转义的正则元字符包括 .、^、$、[、]、(、)、{、}、|、+、、?、\;字母、数字、/、_、- 及空格通常无需转义,? 和 在此上下文中为字面字符。</p>

Apache 的 RewriteCond 中,特殊字符需要转义才能被正则引擎正确识别,否则会被当作元字符处理(比如点号 . 默认匹配任意单字符,而非字面意义的“.”)。
哪些字符必须转义
在 condPattern(即 RewriteCond 的匹配模式部分)中,以下字符具有正则含义,若想匹配其字面值,需加反斜杠 \:
-
.→ 写成\.(例如匹配域名中的点:example\.com) -
^和$→ 在模式内部需转义才表示普通字符(如匹配字符串 "^start",应写\^start) -
[、]、(、)、{、}、|、+、*、?、\→ 凡是正则里有特殊功能的,要字面匹配就得前置\
常见转义示例
实际配置中高频出现的写法:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 匹配主机名为
www.example.com:RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] - 匹配 Referer 来自
https://shop.my-site.org/product:RewriteCond %{HTTP_REFERER} ^https://shop\.my\-site\.org/product
(注意连字符-虽非正则元字符,但为保险起见也可不转义;而.和/后的.必须转义) - 匹配路径含
api/v2.1/:RewriteCond %{REQUEST_URI} ^/api/v2\.1/
不需要转义的情况
以下字符在 condPattern 中通常无需转义:
- 字母、数字、斜杠
/、下划线_、短横线-(除非在字符组[...]中作范围符,如[a-z]) - 问号
?和星号*:在 RewriteCond 的 pattern 中,它们**不是**通配符——它们就是字面字符;通配逻辑由正则引擎按规则解释,不是 Apache 特殊语法 - 空格:直接写即可(但建议用引号包裹整个 pattern 避免解析歧义)
小技巧:不确定就转义
如果对某个字符是否需要转义拿不准,加个 \ 一般不会出错(除非它本身是反斜杠)。尤其对 .、^、$、( )、[ ],养成转义习惯更稳妥。调试时可配合 R=302 和浏览器开发者工具观察重定向行为,验证匹配是否符合预期。

















