【问题标题】:RewriteCond and RewriteRule, how to combine two rewrite rules to oneRewriteCond 和 RewriteRule,如何将两个重写规则合二为一
【发布时间】:2015-07-10 20:11:25
【问题描述】:

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

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

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

e。这不应该匹配/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)

【问题讨论】:

    标签: regex apache mod-rewrite url-rewriting


    【解决方案1】:

    我从未这样做过,但如果我理解正确,您可以尝试在第一次重写完成时设置一个环境变量,然后在第二次重写之前为此变量添加条件检查。比如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2020-01-08
      • 1970-01-01
      相关资源
      最近更新 更多