質問: .htaccessでのリダイレクト設定について、質問です。 初歩的な内容でしたらすみません。 現在、.htaccessでリダイレクトを設定しているところなのですが、 パラメータ付きURLからパラメータ付きURLへのリダイレクト設定がどうしても分からず、困っています。 お力を貸していただければ幸いです。 具体的なリダイレクトのイメージは下記の通りです。 ``` aaa.com/cbbb/ccc.html?class=ddd&word= ↓ aaa.com/?eee=fffff ``` 同じドメイン内で、旧サイトから新サイトに301リダイレクトさせたいです。 また、パラメータ付きURLに規則性が低い為、 個別に設定できるような記述方法だと助かります。 不足している情報があれば、教えていただければ補足いたします。 宜しくお願い申し上げます。 <補足> 上記の場合の方法は解決しましたが、 リダイレクト後の文字列に「%」が含まれている場合にうまくリダイレクトされません...。 [NE,QSA,R=301,L]も試しましたが、だめでした...。 ご存知の方がいらっしゃいましたら、お教えいただきたいです。 よろしくお願いします。 <補足2> 上記の「%」が正常に読み込まれない問題は解決しましたが、 数字がリダイレクトされると他の数字に変わってしまう問題が発生しました。 例えば、下記のような感じです。 ・表示させたいURL http://aaa.com/?bbb=jsearch&ct%5B%5D=260 ・現在表示されているURL http://aaa.com/?bbb=jsearch&ct%80B%80D=209 .htaccessに記述した数字がリダイレクト時に勝手に変更になるなんてことがあるのでしょうか...? 解決方法がわかる方がいらっしゃいましたら、是非お教えいただきたいです。 よろしくお願いします。 <補足3> ↑補足2の問題は試験的に記述していた他の記述が邪魔していただけでした。
回答: mod_rewriteでURIを書き換える場合、クエリ文字列はデフォルトで引き継がれます。 したがって、URI部分だけをrewriteしてあげればOKです。 単純にクエリを引き継いでリダイレクトする場合はこんな感じ。 ``` RewriteCond %{REQUEST_URI} ^/cbb/ccc.html RewriteRule .* / [R=301,L] ``` 上記例の様にクエリ文字列、パラメタ両方とも変更する場合はrewrite前のクエリを削除して新しくつければいいでしょう。 RewriteRuleの後ろに?をつければ、rewrite前のクエリ文字列は削除されます。 ``` RewriteCond %{REQUEST_URI} ^/cbb/ccc.html RewriteCond %{QUERY_STRING} class=ddd RewriteRule .* /?eee=fffff [R=301,L] ``` 試験はしていませんが、参考になれば。