apache - 如何在htaccess中捕获组?

标签 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

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

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/

相关文章:

javascript - 我应该使用 XmlHttpRequest POST 发送额外的 header 吗?

php - 提取 MP3 URL 的专辑封面图像

java - 如何禁用 PDFBox 警告日志记录

php - 限制使用 htaccess 的访问,但允许来自网页的访问

.htaccess - htaccess 重定向友好获取文件

.htaccess - 如何通过 cpanel 中的 .htaccess 限制对我们网站的访问?

regex - nginx 重写排除

cakephp - Cake PHP 如何将参数从一个 Controller 操作传递到另一个 View

Apache 重写和重定向

ruby-on-rails - 如何在 ubuntu 上的 LAMP 中的 Apache 中部署 Ruby On Rails 应用程序,而无需安装 Ruby 和 Rails