1

誰かが助けてくれるかどうか疑問に思っていました。サイトで特定の単語を検索したときに顧客を特定のページに誘導するようにリダイレクト ファイルを設定しています。これは、GBP 通貨記号 (£) を検索文字列に渡そうとする場合を除いて、以下の同様のルールですべて正常に機能します。たとえば、顧客を「http://www. mysite.com/offers/3-for-20.list」で「3 for £20」を検索すると、以下のルールが設定されました:-

RewriteCond %{QUERY_STRING} ^search\=(3\+for\+£20)$ [NC]
RewriteRule ^.* http://www.mysite.com/offers/3-for-20.list?s=%1 [L,R=301]

上記を試してみましたが成功しませんでしたが、これに役立つものやエスケープ文字を見つけることができませんでした。検索を正常に完了しているにもかかわらず、要求されたページを指していないというエラー ページが表示されません。 ..search=3+for+%C2%A320' HTTP/1.1 200

上記をリダイレクトルールに入れてみましたが、同じ結果が得られました。

RewriteCond %{QUERY_STRING} ^search\=(3\+for\+C2%A320)$ [NC]
RewriteRule ^.* http://www.mysite.com/offers/3-for-20.list?s=%1 [L,R=301]

誰も私がこれを行う方法についてアイデアを持っていますか?

ご協力いただきありがとうございます。

4

1 に答える 1

0

URI とは異なり、URL エスケープに関する限り、クエリ文字列の扱いは少し異なります。URI はルールを通過する前にエスケープされませんが、クエリ文字列変数はエスケープされないままです。

 search=3 for £20

%{QUERY_STRING}変数内でエスケープされません:

search=3+for+%C2%A320

さらに、書き換えルールで一致を逆参照する場合、mod_rewrite はクエリ文字列を再度NEエスケープする必要があるため、フラグを使用しないように指示する必要があります。

RewriteCond %{QUERY_STRING} ^search=(3\+for\+%C2%A320)$ [NC]
RewriteRule ^.* http://www.mysite.com/offers/3-for-20.list?s=%1 [L,R=301,NE]

(2 回目の試行では の%前に がありませんでしたC2)

于 2012-10-22T17:46:46.390 に答える