我想使用mod_rewrite在我的URL中的括号内捕获一个字符串并进行重定向 .
我的网址:
something?var_a=A&var_b=(B)&var_c=C
我的.httaccess文件与正则表达式:
RewriteEngine on
RewriteRule ^/?.+var_b=\((.*)\)$ somedir/$1 [R]
我只想捕捉圆括号之间的内容,所以我的重定向应该是这样的: somedir/B
我在http://htaccess.madewithlove.be/测试我的正则表达式,但我得不到匹配 .
我不知道我在这里缺少什么,即使我尝试了更简单的正则表达式,例如 .+var_b(.*)$
我得不到比赛 . 只有当我的正则表达式在开头寻找模式时,我得到一个匹配,所以例如正则表达式 something(.*)$
工作 .
我在这里想念的是什么?
1 回答
原因是RewriteRule没有收到查询的
?x=y
部分 .%2
变量引用最后一个RewriteCond
的模式,而$2
将引用此RewriteRule
中的模式 . 最后的?
阻止查询部分?x=y
自动附加到结果的末尾 .模式中的
(^|&)
和(&|$)
保证var_b=(B)
是完整参数而不是其中的一部分 . 如果没有这些,模式也会匹配?xyzvar_b=(B)
或?var_b=(B)xyz
. 有了这些,它只会匹配?var_b=(B)
或?a=b&var_b=(B)&x=z
等 .