Apache RewriteCond通过%{...}访问服务器变量,需严格区分大小写、规范命名,常见变量如%{HTTP_HOST}、%{REQUEST_URI}、%{HTTPS}等,配合正则匹配(可加[NC]忽略大小写)及-f、-d等测试标志实现条件判断。

Apache 的 RewriteCond 通过 %{...} 语法访问服务器变量,写法需严格遵循变量名规范,区分大小写,且多数变量需在特定上下文(如虚拟主机、目录级 .htaccess)中才可用。
常见服务器变量写法示例
变量名写在 %{} 内,不加空格,常用变量包括:
-
%{HTTP_HOST}—— 当前请求的 Host 头(如example.com) -
%{REQUEST_URI}—— 请求的路径和查询字符串前部分(如/path/to/file?x=1中的/path/to/file) -
%{QUERY_STRING}—— 纯查询字符串(如x=1&y=2) -
%{HTTPS}—— 值为on或off,判断是否启用 HTTPS -
%{REMOTE_ADDR}—— 客户端 IP 地址 -
%{HTTP_USER_AGENT}—— 浏览器 UA 字符串
匹配时注意正则表达式语法
条件值(RewriteCond 第三个参数)是正则表达式,默认区分大小写;如需忽略大小写,加 [NC] 标志:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
RewriteCond %{HTTP_HOST} ^www\.example\.com$—— 精确匹配 www.example.com -
RewriteCond %{HTTPS} !on [NC]—— 匹配非 HTTPS(!表示取反) -
RewriteCond %{QUERY_STRING} ^id=(\d+)—— 提取查询参数 id 的数值
变量存在性与空值判断
某些变量可能为空或未设置,可用 -n(非空)、-z(为空)、-d(是目录)、-f(是文件)等测试标志:
-
RewriteCond %{REQUEST_FILENAME} -f—— 判断请求路径是否对应真实文件 -
RewriteCond %{ENV:REDIRECT_STATUS} ^$—— 判断是否为首次请求(避免循环重定向) -
RewriteCond %{HTTP_REFERER} ^$—— 匹配无来源(防盗链常用)
嵌套变量与环境变量组合
可结合 %{ENV:...} 访问 Apache 环境变量,或用 %{SSL:...} 获取 SSL 相关信息(需 mod_ssl 启用):
-
RewriteCond %{ENV:REDIRECT_SUBDOMAIN} ^blog$—— 检查之前设置的环境变量 -
RewriteCond %{SSL:SSL_PROTOCOL} ^TLSv1\.2$—— 限制仅允许 TLS 1.2 协议 -
RewriteCond %{LA-U:REMOTE_USER} ^admin$—— 使用“内部重写”获取认证用户名(需配合 auth 模块)
变量名必须准确,拼错或大小写不符会导致条件恒为假;建议搭配 RewriteLog(Apache 2.2)或 LogLevel alert rewrite:trace3(Apache 2.4)调试实际值。

















