RewriteCond 和 RewriteRule,如何将两个重写规则合并为一个

RewriteCond and RewriteRule, how to combine two rewrite rules to one

我有以下规则来满足这个objective:

  1. 需要删除查询字符串 brandPage=1(示例 a、b、c、d),但要保留任何添加的查询字符串(示例 B)
  2. /browse 需要改为/brand

RewriteCond %{QUERY_STRING} ^(.*)brandPage=1&?(.*)$
RewriteRule (.*) ?%1%2
RewriteRule /browse/(.*) /brand/ [QSA,R=301,L]

例子
a. /browse/aerolatte/_/N-1z13u3z?brandPage=1 b. /browse/room/aerolatte/_/N-4wk7Z1z13u3z?brandPage=1&icmp=abc c. /browse/women/womens-tops-600001558/armani-jeans/_/N-53f3Z4gpgZ1z13u2h?brandPage=1 d. /browse/%C3%A5ry-trays/_/N-1z13va1?brandPage=1

e。这不应该匹配 /browse/aerolatte/_/N-1z13u3zq

重定向的 url 会是什么样子:

/brand/aerolatte/_/N-1z13u3z<br> /brand/room/aerolatte/_/N-4wk7Z1z13u3z?icmp=abc<br> /brand/women/womens-tops-600001558/armani-jeans/_/N-53f3Z4gpgZ1z13u2h

这适用于示例 a 到 d,但它也适用于 e。我现在明白这是因为只有 RewriteCond 之后的第一个 RewriteRule 被链接,因此我如何将这两个 RewriteRule 组合起来,或者我可以在每一行上使用 [C] 将它们简单地链接在一起吗?

我正在使用 IHS 6.1.0.47 (Apache 2.0.47)

我从来没有这样做过,但如果我没理解错的话,你可以尝试在第一次重写完成时设置一个环境变量,然后在第二次重写之前为这个变量添加一个条件检查。类似于:

RewriteCond %{QUERY_STRING} ^(.*)brandPage=1&?(.*)$
RewriteRule (.*) ?%1%2 [E=done:1]
RewriteCond %{ENV:done} =1
RewriteRule /browse/(.*) /brand/ [QSA,R=301,L]