如何在htaccess中捕获组?

时间:2013-08-26 17:31:55

标签: apache .htaccess redirect mod-rewrite

我很难通过301重定向捕获htaccess中的群组。

我的规则是RedirectMatch 301 ^/viewitems/([_\-a-zA-Z0-9]+)/([_\-a-zA-Z0-9]+) http://example.com/catalogsearch/result/?q=$2&dir=desc&order=relevance

但是有一个

的测试网址

http://example.com/viewitems/underground-hardwar/manhole-cable-hooks

它构建了一个如下所示的URL:

http://example.com/catalogsearch/result/?q=manhole-cable-hooks/viewitems/underground-hardwar/manhole-cable-hooksdir=desc/viewitems/underground-hardwar/manhole-cable-hooksorder=relevance

显然,用每个捕获组替换每个&。发生了什么事,我做错了什么?

1 个答案:

答案 0 :(得分:2)

Apache使用PCRE,所以我相信未转义的&会执行perl对$&的处理,也就是说,它保存最后匹配的模式的字符串,在这种情况下:

/viewitems/underground-hardwar/manhole-cable-hooks

所以会发生的是,对于每个&,它会用上面的内容替换它。

这就是&需要转义才能获得所需结果的原因。

RedirectMatch 301 ^/viewitems/([^/]+)/([^/]+)/? /catalogsearch/result/?q=$2\&dir=desc\&order=relevance