このサイトでは昔のコンテンツに飛んできた人のために.htaccessやmod_rewriteで新しいほうに飛ぶよう設定している。昔のコンテンツに飛んできた人はとりあえず目的の所へ辿り着くことができるはずだ。しかしここで大きな問題が発生した。
MovableTypeとNucleusでは個別エントリのURL記述が全く違うので個別エントリについてはこつこつとRedirect permanentでURLを指定してやったわけだが、月や日別のアーカイブはMobavleTypeで使っていたものを流用できる為、httpd.confに次のように記述して対処していた。
RewriteRule ^/archives/([0-9]+)_([0-9]+)_([0-9]+).(html|php)+ http://oyajiman.minidns.net/oyaji/$1_$2_$3.$4
RewriteRule ^/archives/([0-9]+)_([0-9]+).(html|php)+ http://oyajiman.minidns.net/oyaji/$1_$2.$3
RewriteRule ^/oyaji/archives/([0-9]+)_([0-9]+)_([0-9]+).(html|php)+ http://oyajiman.minidns.net/oyaji/$1_$2_$3.$4
RewriteRule ^/oyaji/archives/([0-9]+)_([0-9]+).(html|php)+ http://oyajiman.minidns.net/oyaji/$1_$2.$3
アーカイブのディレクトリが/archives と/oyaji/archivesの二種類あるのは、あるときアーカイブのディレクトリをごそっと移動させたためだ。このせいで/oyajiディレクトリ内の.htaccessだけでは対応できなくなってしまっていた。そのためまずhttpd.confで一部変換後/oyajiディレクトリ内の.htaccessでNucleus用のURLに変換させるという2段構えで対処してみたのだ。これでとりあえず過去のURLでとんできた人を現在のエントリに飛ばすことは出来たのである。
しかしその後が良くない。飛んできた後ページ内のリンクをクリックすると存在しないURLにジャンプしてしまいエラーになるのだ。
よく見てみると、書き換える前のURLの一部(上記の赤文字の部分)を引きずっているようでおかしなディレクトリの指定になってしまっていた。
これではあまりにひどいのでどうにかしなくてはならない。調べてみるとmod_rewriteのおまじないのひとつに[R=301,L]というのがあって、これを使うと
との事らしい。で、早速このおまじないを加えてみると見事にうまくいった。
修正後はこんな感じ
RewriteRule ^/archives/([0-9]+)_([0-9]+)_([0-9]+).(html|php)+ http://oyajiman.minidns.net/oyaji/$1_$2_$3.$4 [R=301,L]
RewriteRule ^/archives/([0-9]+)_([0-9]+).(html|php)+ http://oyajiman.minidns.net/oyaji/$1_$2.$3 [R=301,L]
RewriteRule ^/oyaji/archives/([0-9]+)_([0-9]+)_([0-9]+).(html|php)+ http://oyajiman.minidns.net/oyaji/$1_$2_$3.$4 [R=301,L]
RewriteRule ^/oyaji/archives/([0-9]+)_([0-9]+).(html|php)+ http://oyajiman.minidns.net/oyaji/$1_$2.$3 [R=301,L]