MovableTypeを2.661→3.151-jaにアップグレードしたわけですが、実際は以下のような手順でやりましたです。
↓
バックアップファイルの文字コードをEUC-JPからUTF-8に変更&改行コードをLFに統一(なぜかCRLFも混じってたので)して上書き保存
↓
3.151-jaを新規インストール
↓
3.151-jaにバックアップファイルをインポート
MySQLにもダイナミックページにも指定日投稿にも対応してるんで、結構快適になりましたですよ。
でもひとつ困ったことがあって、以前だったら2005年4月30日 15時28分30秒に作られたエントリーだったら
/2005/0430.html
(<$MTArchiveDate format="%Y/%m%d"$>.html)
がエントリーのURLだったんです(※アーカイブディレクトリは/の直下)。
が、これだとアーカイブの種類は必然的に「Daily」しか選べなくなってしまうわけです。同一日付で複数のエントリーがあったら新しいもので上書きされちゃうので、「Individual」はダメなのです。それじゃ困るよなあということで、今回のエントリーのURLは
/archives/2005/0430_1528.html
(<$MTArchiveDate format="%Y/%m%d_%H%M"$>.html)
になるようにして、アーカイブの種類は「Individual」にしました。となると、以前のURL
/2005/0430.html
にアクセスされたらファイルがないので、当然 File Not Found になっちゃいますね。じゃあどうしようかというのが今回のネタです。
で、解決策として思いついたのは下記の手法。mod_rewriteを使います。
■mod_rewrite
RewriteEngine On
RewriteOptions inherit
<MTArchiveList archive_type="Individual">
RewriteCond %{REQUEST_URI} <$MTArchiveDate format="/%Y/%m%d"$>.html [NC]
RewriteRule ^(.*)$ <$MTArchiveDate format="/archives/%Y/%m%d_%H%M"$>.html [L,R=301]
</MTArchiveList>
</IfModule>
コレを記述したインデックステンプレートを新規に作成し(ファイル名はテキトーで)、再構築した際にできた内容を/.htaccessにコピペすればできあがり。
試しに旧URLの「http://monolog.spanstyle.com/2004/0916.html」にアクセスすると、自動的に現在のURL「http://monolog.spanstyle.com/archives/2004/0916_2259.html」にリダイレクトされるのが確認できます。
と思ったら、人工事実さんで「MovableTypeのページ分割/Permalinkの変更」という、そのものズバリなコトをやってるのを発見。しかもこちらの方があからさまにスマートなので、mod_rewriteはやめてこっちの手法を取ることにしました。作り直したのはこっち。
■redirect
<MTArchiveList archive_type="Individual">
Redirect permanent <$MTArchiveDate format="/%Y/%m%d"$>.html <$MTBlogURL$><$MTArchiveDate format="archives/%Y/%m%d_%H%M"$>.html
</MTArchiveList>
</IfModule>
<$MTBlogURL$>タグのオシリに/がついてるため、こっちは<$MTArchiveDate$>のformatから一文字目の/を抜いてあります。これで同じようにリダイレクトされるようになりました。めでたし。
それにしても2年前の既出ネタを掘り返していたとは、遅れすぎてる感が否めませんな…。