RewriteCond 是 Apache mod_rewrite 中设定重写前提的指令,需配合 RewriteRule 使用,仅当所有条件满足时规则才执行;其语法为 RewriteCond TestString CondPattern [flags],支持正则、字符串相等、文件存在等判断,并默认 AND 逻辑,可用 [OR] 实现或关系。

RewriteCond 是 Apache mod_rewrite 模块中用于设定重写规则前提条件的指令。它不单独生效,必须配合 RewriteRule 使用,只有当所有前置 RewriteCond 都满足时,后面的 RewriteRule 才会执行。
下面直接说明怎么写、常见写法和关键细节:
基本语法结构
每个 `RewriteCond` 一行,格式为:
RewriteCond TestString CondPattern [flags]其中:
-
TestString:要检测的字符串,可以是变量(如
%{HTTP_HOST}、%{REQUEST_URI})、普通字符串或含变量的组合(如"%{HTTP_HOST}%{REQUEST_URI}") -
CondPattern:匹配模式,支持正则表达式(默认)、字符串比较(加
=前缀)、或特殊关键字(如-f、-d) -
flags(可选):用逗号分隔,常用有
NC(忽略大小写)、OR(逻辑或,默认是 AND)、PT(传递给后续处理器)等
常用变量和判断场景
这些变量在 `TestString` 中最常出现:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
%{HTTP_HOST}:访问的域名(如example.com) -
%{REQUEST_URI}:请求路径(不含参数,如/news/123) -
%{QUERY_STRING}:URL 参数部分(如a=1&b=test) -
%{HTTPS}:值为on或off -
%{REMOTE_ADDR}:客户端 IP 地址 -
%{HTTP_REFERER}:来源页面(注意拼写是REFERER,不是REFERRER)
典型 CondPattern 写法
根据匹配需求选择不同写法:
-
正则匹配(默认):
RewriteCond %{HTTP_HOST} ^www\.example\.com$(注意点要转义) -
精确字符串相等:
RewriteCond %{HTTPS} =off(用=开头表示字面量相等) -
文件/目录存在判断:
RewriteCond %{REQUEST_FILENAME} -f(是文件)、-d(是目录)、-l(是软链接) -
非空判断:
RewriteCond %{QUERY_STRING} .+(点加号表示至少一个字符) -
排除某值:
RewriteCond %{HTTP_HOST} !^example\.com$(开头加!表示“非”)
多个条件与逻辑关系
多个 `RewriteCond` 默认是 **AND** 关系(全部为真才触发规则)。若需 OR,给任意一个条件加上 [OR] 标志:
RewriteCond %{HTTP_HOST} ^blog\.example\.com$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
上面表示:只要匹配 www 或 blog 子域,就跳转。
注意:[OR] 只影响它所在行与下一行的关系,不能跨多行混用,否则逻辑易出错。

















