apache rewriterule用()创建捕获分组,按左括号顺序编号为$1、$2…;字面括号等需转义;rewritecond中捕获用%1、%2引用;嵌套括号仍按左括号出现顺序编号。

Apache 的 RewriteRule 用圆括号 () 创建捕获分组,匹配到的内容按左括号出现顺序依次存为 $1、$2……,在重写目标(substitution)中直接引用即可。
基本写法:括号包裹要提取的部分
把 URL 中你想提取的动态段用 () 包起来,Apache 自动编号:
-
RewriteRule ^/user/(\d+)/(.+)$ /profile.php?id=$1&name=$2 [L]
访问/user/123/john时,$1是123,$2是john - 注意:只对当前
RewriteRule的 pattern 部分生效,不能跨规则直接使用
处理 URL 中的字面括号等特殊字符
如果路径里真有圆括号、点、加号等,必须转义,否则会被当作正则元字符解析:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
RewriteRule ^/page\((\d+)\)\.html$ /page.php?page=$1 [L]
匹配/page(5).html,$1得到5 - 常见需转义字符:
\.(点)、\+(加号)、\?(问号)、\*(星号)、\(和\)
跨条件捕获:用 %1、%2 引用 RewriteCond 中的分组
当需要根据查询参数(如 ?ref=abc)做判断时,必须用 RewriteCond 单独捕获,再通过 %1、%2 在 RewriteRule 中引用:
-
RewriteCond %{QUERY_STRING} ref=([^&]+)RewriteRule ^/article\.php$ /redirect.php?source=%1 [L,QSA] - 这里
%1来自RewriteCond的捕获,不是$1 -
[QSA]可保留原查询字符串,避免覆盖
嵌套括号编号规则:按左括号顺序,不是按层级
多个括号嵌套时,编号只看左括号从左到右出现的次序:
-
RewriteRule ^/(a(b(c)))$ /test.php?outer=$1&middle=$2&inner=$3 [L]
请求/abc→$1=abc、$2=bc、$3=c - 若只需最内层值,可用非捕获组简化:
^/(?:a(?:b(c)))$,此时只有$1=c










