我几个小时以来一直在努力解决这个看似简单的重新直接任务,因为我的生活无法实现。我是否传递了 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]
非常感谢任何帮助..谢谢
答案 0 :(得分:2)
这是因为RewriteCond
匹配是带有边界的正则表达式。因此,如果您在查询字符串中有:
pID=19
它将与pID=1
匹配,因为它不会检查查询字符串的结尾,pID=1
是pID=19
的一部分。
您需要将条件更改为:
RewriteCond %{QUERY_STRING} pID=1(&|$)
和
RewriteCond %{QUERY_STRING} pID=19(&|$)
结尾处的(&|$)
表示在这些数字之后,您有&
字符(对于另一个参数)或字符串结尾($
)。
此外,如果您担心可能以pID
结尾的其他查询字符串参数,例如foopID
,那么您应该在这些正则表达式的前面添加边界检查,如下所示:< / p>
RewriteCond %{QUERY_STRING} (^|&)pID=1(&|$)
因此(^|&)
可以是查询字符串的开头,也可以是&
字符。