我很难通过 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
它构建了一个如下所示的网址:
http://example.com/catalogsearch/result/?q=manhole-cable-hooks/viewitems/underground-hardwar/manhole-cable-hooksdir=desc/viewitems/underground-hardwar/manhole-cable -hooksorder=相关性
显然,将每个 &
替换为每个捕获组。发生了什么事以及我做错了什么?
最佳答案
Apache 使用 PCRE,所以我相信未转义的 &
的作用与 perl 对 $&
的作用相同,即,它保存最后一个匹配模式的字符串,在本例中:
/viewitems/underground-hardwar/manhole-cable-hooks
因此,对于每个 &
,它都会将其替换为上面的内容。
这就是为什么需要转义 &
才能得到所需的结果。
RedirectMatch 301 ^/viewitems/([^/]+)/([^/]+)/? /catalogsearch/result/?q=$2\&dir=desc\&order=relevance
关于apache - 如何在htaccess中捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18449667/