mod_rewrite - 301重定向问题

时间:2012-09-07 03:38:57

标签: apache mod-rewrite

我几个小时以来一直在努力解决这个看似简单的重新直接任务,因为我的生活无法实现。我是否传递了 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]

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

1 个答案:

答案 0 :(得分:2)

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

pID=19

它将与pID=1匹配,因为它不会检查查询字符串的结尾,pID=1pID=19的一部分。

您需要将条件更改为:

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

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

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

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

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

因此(^|&)可以是查询字符串的开头,也可以是&字符。