我想使用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(.*)$
可以工作。
我在这里缺少什么?
答案 0 :(得分:2)
RewriteEngine On
RewriteCond %{QUERY_STRING} (^|&)var_b=\((.*?)\)(&|$) [NC]
RewriteRule ^.*$ somedir/%2? [R]
原因是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
等。