apache rewritecond 变量用 %{...} 引用,分服务器环境、请求信息、重写捕获三类;%1/%2 引用前序 rewritecond 捕获值,$1/$2 仅限 rewriterule;http 头需转为 http\_xxx 格式;判断时推荐加引号并用 -n/-z 显式校验。

常见变量写法示例
变量名区分大小写,且不能加空格或多余符号:
- %{HTTP_HOST} —— 当前请求的 Host 头(如 example.com)
- %{REQUEST_URI} —— 不含查询参数的路径(如 /path/to/file.php)
- %{QUERY_STRING} —— URL 中 ? 后面的部分(如 a=1&b=2)
- %{HTTPS} —— 值为 "on" 或 "off",判断是否 HTTPS
- %{ENV:REDIRECT_STATUS} —— 环境变量,常用于避免循环重定向
引用 RewriteRule 捕获的值
在 `RewriteCond` 中无法直接使用 `$1`、`$2` 这类后向引用(它们只在 `RewriteRule` 的替换字符串中有效)。但可以用 %1、%2 引用前面 `RewriteCond` 中正则捕获的子组:
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$ [NC]
RewriteCond %1 !=www
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
这里 `%1` 对应第一个 `RewriteCond` 中 `(.+)` 捕获的内容(如 sub),不是 ``。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
引用服务器或请求头字段
HTTP 请求头需加 HTTP_ 前缀并转为大写下划线格式:
-
%{HTTP_USER_AGENT} → 对应请求头
User-Agent -
%{HTTP_REFERER} → 对应
Referer头 - %{HTTP_X_FORWARDED_FOR} → 常用于获取真实客户端 IP
注意:Referer 拼写是 “Referer”,不是 “Referrer”,变量名也按此拼写。
调试技巧与避坑提示
变量未定义时默认为空字符串,可能造成意料外匹配。建议显式判断:
- 用 -n 判断非空:
RewriteCond %{HTTP_HOST} -n - 用 -z 判断为空:
RewriteCond %{QUERY_STRING} -z - 避免直接写
%{HTTP_HOST} =example.com,应加引号:"%{HTTP_HOST}" = "example.com"(推荐) - 开启
RewriteLog(旧版 Apache)或使用RewriteLogLevel 9+ErrorLog查看实际变量值










