Akiary,tDiaryからMovable Typeに移行した際のリダイレクト設定

私は,AkiaryやtDiaryからMovable Typeに移行したのですが,過去ログもMovable Typeに読ませて,昔のディレクトリはざっくり削除してしまいました.

しかし,昔のURIは長いこと公開していたわけですので,検索エンジンに登録されていたりするわけで,そこからたどってきた人には敢えなく「404 Not Found」が突きつけられるわけです.404エラー,403エラーになったときに表示されるファイルにはMovable Typeの全文検索窓をつけてはいたのですが,やはり,リダイレクトされるのが一番.

そこで,さくらインターネットではユーザーが「.htaccess」による設定をすることができますので,書き足すことにしました.

Akiaryは過去ログが「年(西暦4桁)月(2桁).html」の形で出力されるので,簡単です.例えば,Akiaryの過去ログを格納していたディレクトリが「/akiary/log/」,Movable Typeのアーカイブが格納されているURIが「http://sample.sakura.ne.jp/archive/」だとすると,

RedirectMatch /akiary/log/([0-9]{4})([0-9]{2})\.html$ http://sample.sakura.ne.jp/archive/$1/$2/

と書き足せばOK.長いですが,これ全部で1行です.どうも,リダイレクト先は「http://~」の形で書かないとうまくいかないようです.

ところが,tDiaryで詰まってしまいました.

tDiaryは,全てのファイルを動的に生成します.例えば,「?date=年(西暦4桁)月(2桁)」とか「?date=年(西暦4桁)月(2桁)日(2桁)」という形で過去ログを呼び出します.この,CGIに渡す部分というのが,RedirectMatchではうまく行かないのです.

それで,ずいぶん悩んでいて,放置していたんですが,このほど,mod_rewriteというのを使えばいいと分かりました.幸い,さくらインターネットは,2005年4月6日からmod_rewriteモジュールに対応していましたので,それを使うことにします.

mod_rewriteという物を全然しらなかったので,かなり苦労したんですが,最終的にこんな感じです.tDiaryをインストールしていたディレクトリが「/tdiary/」,Movable Typeのアーカイブが格納されているURIが「http://sample.sakura.ne.jp/archive/」の時の例です.RewriteEngine on
RewriteCond %{QUERY_STRING} date=([0-9]{4})([0-9]{2})([0-9]{2})?$
RewriteRule ^tdiary/ http://sample.sakura.ne.jp/archive/%1/%2/ [L]

1行目は,mod_rewriteによるURIの書き換えを有効にするという命令.2行目は,CGIに渡る文字列の設定.今回は,date=200611(2006年11月だった場合)や,date=20051212(2005年12月12日だった場合)などを年・月に切り分けた形で受け取りたかったので,そのように正規表現を作ります.

そして,最後の行でURIをどう書き換えるかを設定します.この行にある[L]というのは,これで書き換え処理を中止して,以降の書き換えルールは(この行による書き換えURIには)適用しません,という意味です.以降に書き換えの指定は無いんですが,一応つけておきました.

本当は,R=301を指定して,永久にURIが変更しているんだということを出したかったのですが,そうすると,「http://sample.sakura.ne.jp/archive/2006/12/?date=200612」のようなURIがブラウザに表示されていたので(実際に表示されているのは,http://sample.sakura.ne.jp/archive/2006/12/),うまく行くのかどうか分からず,今回は,つけませんでした.

日時: 2006年12月29日 | PC/Web |

コメントを投稿

(空欄でもかまいません)

(メールアドレスは管理人に通知されますが,Web上には表示されません)

Powered by Movable Type