Apacheのリダイレクト機能



こんにちはKUJIRAです。

 

ブログのURLを少し変えたのですが、前のURLにアクセスが集中して全くと言っていいほど集客率が伸びないため、以前のURLに飛んで来たら自動的に今のURLにリダイレクトするようApacheを設定しました。

 

いやぁ、ホントApacheは色々設定できて幅広い運用ができます。今回使ったのはRedirectMatchディレクティブと言うやつでアクセス要求のあったURLに対し正規表現でマッチしたものをリダイレクト先URLに変更、編集して要求元に返してあげると言うやつです。

 

この機能、何が強力かと言うと正規表現でマッチしたものを利用できる点だと思います。

 

通常のリダイレクトでも正規表現は使えますがあくまでも検索だけでリダイレクト先の編集はできません。以下に例を書きます。

 

Redirect /foo/.* http://foo.hogehoge.com

=> http://www.hogehoge.com/foo/がURLに含まれているページにアクセス要求があった場合、http://foo.hogehoge.comへリダイレクトさせる。

 

どうでしょうか。正規表現が分かる人なら検索はできるけどマッチしたものをリダイレクト先URLに組み込むと言うところができないのがわかると思います。

 

そこでRedirectMatchディレクティブの出番です。

 

RedirectMatch /(foo[0-9])/(.*) http://$1.hogehoge.com/$2

=> http://www.hogehoge.com/foo/1234/test.htmlというページにアクセス要求があった場合はそのままのURL
=> http://www.hogehoge.com/foo1/1234/test.htmlの場合はhttp://foo1.hogehoge.com/1234/test.htmlにリダイレクトさせる。

 

違いは一目瞭然だと思います。RedirectMatchディレクティブは正規表現でマッチングしたものを任意の文字列に組み込むことができます。

 

リダイレクトルール「/(foo[0-9])/(.)」のうち、「(foo[0-9])」と「(.)」が「「http://$1.hogehoge.com/$2」の「$1」「$2」の箇所にそれぞれ組み込まれます。

 

正規表現に精通していれば複雑なURLでも事細かに変換しリダイレクトできるため複雑なシステムになればなるほど重宝する仕組みだと言えます。

 

皆様もサイトのURLを変更の際にはこの設定を活用することをお勧めします。KUJIRAでした。