以前はクエリ文字列パラメータを渡すだけでクエリ文字列を正しくリダイレクトすることができたので、このサイトとwebmasterworld全体でクエリ文字列のリダイレクトに関する包括的なアドバイスは、「RewriteCondクエリ文字列として扱う」ようです。約10個のURLのセットに対して次のタイプルールを使用しようとしています。
URLの例:
http://www.example.org/training_book.asp?sInstance=1&EventID=139
私がこれまでに持っているもの:
RewriteCond %{QUERY_STRING} ^training_book.asp\?sInstance=1&EventID=139
RewriteRule /clean-landing-url/ [NC,R=301,L]
だから、私がしたいのは
http://www.site.org/training_book.asp?sInstance=1&EventID=139 301> http://www.site.org/clean-landing-url
しかし、代わりに何が起こっているのかはこれです:
http://www.site.org/training_book.asp?sInstance=1&EventID=139 301> http://www.site.org/training_book.asp/?sInstance=1&EventID=139
クエリ文字列の直前にスラッシュを追加してから、完全なURLを解決します(明らかに、404です)。
私は何が欠けていますか?実際の%{QUERY_STRING}パラメータの正規表現の問題ですか?
前もって感謝します!
編集 -
これが私が今のところいるところです。
以下の@TerryEからのアドバイスに基づいて、次のルールを実装してみました。
次のパラメータを持つURLのセットがあります。
http://www.example.org/training_book.asp?sInstance=1&EventID=139
http://www.example.org/training_book.asp?sInstance=2&EventID=256
http://www.example.org/training_book.asp?sInstance=5&EventID=188
等
にリダイレクトする必要があります
http://www.example.org/en/clean-landing-url-one
http://www.example.org/en/clean-landing-url-two
http://www.example.org/en/clean-landing-url-three
等
これは、現在正常に機能している「単純な」リダイレクトの完全な例を含む、現在私が持っているhtaccessファイルの正確な構造です(注-http://example.com > http://www.example.comリダイレクトが適用されますhttpd.confで)
#301 match top level pages
RewriteCond %{HTTP_HOST} ^example\.org [NC]
RewriteRule ^/faq.asp /en/faqs/ [NC,R=301,L]
このブロックのすべてのURLはこのタイプです。これらのURLはすべて完全に機能します。
#Redirect all old dead PDF links to English homepage.
RewriteRule ^/AR08-09.pdf /en/ [NC,R=301,L]
このブロックのすべてのURLはこのタイプです。これらのURLはすべて完全に機能します。
問題はここにあります:リダイレクトする以下のタイプのURLをまだ取得できません。@TerryEからのアドバイスに基づいて、構文を次のように変更しようとしました。以下のブロックは正しく機能しません。
#301 event course pages
RewriteCond %{QUERY_STRING} sInstance=1EventID=139$
RewriteRule ^training_book\.asp$ /en/clean-landing-url-one? [NC,R=301,L]
これの出力は
http://staging.example.org/training_book.asp/?sInstance=1&EventID=139
(これは現在staging.example.orgに適用されており、example.orgに適用されます)
(最初の質問でtraining_bookからevent_bookに変更することで、実際の構文の一部を「隠し」ましたが、可能な限り現実的なものに戻しました。)