2

我很难通过 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

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

4

1 回答 1

2

Apache 使用 PCRE,所以我相信未转义&的行为与 perl 所做的一样$&,它保存最后匹配的模式的字符串,在这种情况下:

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

所以发生的事情是,对于每一个&它都用上面的替换它。

这就是为什么&需要转义给你想要的结果。

RedirectMatch 301 ^/viewitems/([^/]+)/([^/]+)/? /catalogsearch/result/?q=$2\&dir=desc\&order=relevance
于 2013-08-26T19:41:26.330 回答