今は存在しない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を随時置き換えるだけだ。
コメント