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

时间:2015-07-10 11:03:18

标签: regex apache mod-rewrite url-rewriting

我有以下规则来实现这一目标:

  1. 需要删除查询字符串brandPage = 1(示例a,b,c,d),但要保留任何添加查询字符串(示例B)
  2. / browse需要更改为/ brand
  3. RewriteCond %{QUERY_STRING} ^(.*)brandPage=1&?(.*)$
    RewriteRule (.*) $1?%1%2
    RewriteRule /browse/(.*) /brand/$1 [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

    即这不应与/browse/aerolatte/_/N-1z13u3zq

    匹配

    重定向网址的样子:

    /brand/aerolatte/_/N-1z13u3z
    /brand/room/aerolatte/_/N-4wk7Z1z13u3z?icmp=abc
    /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)

1 个答案:

答案 0 :(得分:0)

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

func getWithPath(path:String, userState: Any)