0

私はこの一見単純なリダイレクトタスクに何時間も取り組んできましたが、私の人生ではそれを実行できません。URLで1 または 19の値を渡すかどうかにかかわらず、どちらの場合もリダイレクトされます。http://mywebsite.com/catalogue-gifts/chicks。(理想的には、2番目の条件/ルールでユーザーを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=1の一部ですpID=19

条件を次のように変更する必要があります。

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

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

(&|$)末尾のは、これらの数字の後に、&文字 (別のパラメーター用) または文字列の末尾 ( $) があることを意味します。

さらに、 などで終わる可能性のある他のクエリ文字列パラメーターが心配な場合は、次pIDのようfoopIDに、これらの正規表現の前に境界チェックを追加する必要があります。

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

したがって、(^|&)はクエリ文字列の先頭か文字のいずれか&です。

于 2012-09-07T03:47:52.113 に答える