0

我已经为这个看似简单的重定向任务苦苦挣扎了好几个小时,而我的一生都无法让它继续下去。无论我在 url 中传递1 还是 19的值,在这两种情况下它都会将我重定向到http://mywebsite.com/catalogue-gifts/chicks。(理想情况下,我希望第二个条件/规则将用户带到http://mywebsite.com/catalogue-gifts/mango-fruit-trees/

以下是我所拥有的:

RewriteCond %{QUERY_STRING} pID=1<br />
RewriteRule ^product_details2\.asp$ http://mywebsite.com/catalogue-gifts/chicks$1? [L,R=301]

RewriteCond %{QUERY_STRING} pID=19<br />
RewriteRule ^product_details2\.asp$ http://mywebsite.com/catalogue-gifts/mango-fruit-trees$1? [L,R=301]

非常感谢任何帮助..谢谢

4

1 回答 1

2

这是因为RewriteCond匹配是有界的正则表达式。因此,如果您在查询字符串中有:

pID=19

它将匹配pID=1,因为它不检查查询字符串的结尾,pID=1pID=19.

您需要将条件更改为:

RewriteCond %{QUERY_STRING} pID=1(&|$)

RewriteCond %{QUERY_STRING} pID=19(&|$)

(&|$)末尾的表示在这些数字之后,您有一个字符&(用于另一个参数)或字符串的结尾 ( $)。

此外,如果您担心其他可能以pID, like结尾的查询字符串参数foopID,那么您应该在这些正则表达式的前面添加一个边界检查,如下所示:

RewriteCond %{QUERY_STRING} (^|&)pID=1(&|$)

所以(^|&)要么是查询字符串的开头,要么是一个&字符。

于 2012-09-07T03:47:52.113 回答