ApacheのRewriteモジュールで旧ブログのURLからリダイレクトする。

今は存在しないURLに到着してしまったリクエストを、実存するURLに転送するにはどうしたらよいのだろうか?この問題を、ApacheのRewiteモジュール(mod_rwrite)で解決してみた。

この「エンジニャー的編集者のブログ」は、ココログで何年も運用していたブログ「なおさん亭::別館」を引き継いだものである。その際、コンテンツはすべてインポートしたが、各投稿のURLはココログ独自のもので、すべて失われてしまった。

これは迂闊であったとしか言いようがない。せっかく、リンクを張って下さった方々に申し訳ないので、個別にリダイレクトさせていただくことにした。

幸いなことに、ココログでは独自ドメインで運用していたので、このブログnaosan.jpと同じドメインでURLが構成されている。なので、自分の中で設定してやれば、問題は解決するのだ。

旧URLが、

http://annex.naosan.jp/2012/10/hogehoge.html

だとして、それに対応する投稿のURLは、

http://blog.naosan.jp/2012/10/3096/

だとしよう。ブログ主は、固定URLに年、月、ID方式を採用しているのだ。

もちろん、ドメインannex.naosan.jpはレンタルサーバ側で有効にしておく。そして、annex.naosan.jpに対応するディレクトリに、.htaccessというファイルを作成する。このファイルは、このディレクトリ以下に作用するApacheの設定ファイルだ。

そこに、このように記述する。

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /
 RewriteRule ^2012/10/hogehoge\.html$ http://blog.naosan.jp/2012/10/3096/ [R=301,L]
 RewriteRule ^(.*)$ http://blog.naosan.jp/ [L]
 </IfModule>

<IfModule mod_rewrite.c>で、Rewriteモジュールが使用可能であったら、RewriteEngine OnでRewrite機能を有効にする。これが大事なんだが、RewriteBase /でルートをURLの基準にする。.htaccessで設定するときには必須だ。

RewriteRuleで、個別のルールを設定する。最初のはもとのURLパターンの正規表現、次が転送先のURL、最後の[]で囲まれたのがフラグだ。

2番目のRewriteRuleでは、とにかくannex.naosan.jpに来たリクエストを、とりあえずblog.naosan.jpのルートに飛ばす。

フラグのR=301は、レスポンスにHTTP 301すなわちMoved Permanently(恒久的移動)を返すために指定で、これによりブラウザや検索エンジンBOTがURLの移動を認識する。

こんな感じで、失われたURLを少しでも活かす方法を確立できた。あとは、アクセスログのRefererを毎日チェックし、リンクを張っていただいているURLを随時置き換えるだけだ。

 

コメント