我很难通过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
显然,用每个捕获组替换每个&
。发生了什么事,我做错了什么?
答案 0 :(得分:2)
Apache使用PCRE,所以我相信未转义的&
会执行perl对$&
的处理,也就是说,它保存最后匹配的模式的字符串,在这种情况下:
/viewitems/underground-hardwar/manhole-cable-hooks
所以会发生的是,对于每个&
,它会用上面的内容替换它。
这就是&
需要转义才能获得所需结果的原因。
RedirectMatch 301 ^/viewitems/([^/]+)/([^/]+)/? /catalogsearch/result/?q=$2\&dir=desc\&order=relevance