.htaccessでリダイレクトする時にクエリを削除

サイトの移転やリニューアルなど、あるページを別のページにリダイレクトさせたい時に大活躍してくれるのが、mod_rewrite。NucleusやWordPressなどで動的に生成されたページを静的なURLに見せてくれる、大変便利なモジュールです。

例えば「hoge.html」というページを「fuga.html」にリダイレクトさせる場合、.htaccessには以下のように記述します。

「RewriteEngine on」はお約束。ちなみに「R=301」は、「ページは恒久的に移動しましたよ」ってことを明示しています。その後ろの「L」は「このリダイレクトが完了すれば以降に記述されているリダイレクト処理はしなくていいですよ」ってことです。

正規表現も使えるので、例えば連番のページ名の場合は一行だけで済んじゃいます。

この場合、「/hoge/001.html」アクセスすると「/fuga/001.html」に転送されます。同じように、「/hoge/1234.html」なら「/fuga/1234.html」ってな感じで、「/hoge/数字(の繰り返し).html」にアクセスされた場合、「/fuga/数字(の繰り返し).html」に転送されます。「/hoge/item_1.html」みたいに数字以外が有るとリダイレクトされません。

で、クエリ付きのURLをリダイレクトさせる場合。

と記述するとリダイレクト先のURLにもクエリが付加されてしまいます。ということで、「QUERY_STRING」を使って以下のように記述します。

これで「/foo/」というページに「?hoge=fuga」というクエリが送信された場合、「bar.html」にリダイレクトすることでが来ます。最後の「?」がないと、リダイレクト先のURLにクエリが付加され「bar.html?hoge=fuga」となってしまいます。

クエリ部分にも正規表現を使えるので、クエリによってリダイレクト先を動的に変更することも出来るのかな?検索フォームとかで日本語が入ってくるといろいろややこしくなりそうですが、できないことは無い気がします。

Web

Text by pushman