移転先へのリンクを生成する ErrorDocument を作る
えーと,というわけで [2007-05-04],旧ドメインは更新を停止し,さらにコンテンツもばっさり消してしまいました.古いほうの RSS にアクセスしている方,大丈夫ですかね.とか書いても「いない人いますかー」みたいな虚しさが残るな.
さて,旧ドメインのコンテンツを消す際,移転先 (このドメイン) へのリンク (「○○に移転しました」云々) を残しておきたいと思った.ページ数が少なければ,各ページに移転先を書いておくという古典的な方法でいける.問題はこのブログだ.Permalink だけで膨大な量があるし,クエリ入り URL まで含めたらお手上げだ.単にまとめてブログのトップページに飛ばす手もあるけど,それはちょっと不親切というものだ.
つーわけで,ErrorDocument を活用してやることにした.たぶん,よくやられてる方法なんだと思うし,もっと洗練された方法があったりするかも知れないけど.
まず .htaccess に
ErrorDocument 404 /file_not_found.cgi
と書いておく.これで,存在しないページにアクセスがあったら 404 を返して file_not_found.cgi にリダイレクトする.
file_not_found.cgi は以下のようになっている (実際に使っているものには英語の注意書きも載っている).
#!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"; print "<html><head>\n"; print "<title>Moved</title>"; print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-jp\">"; print "<link rel=stylesheet type=\"text/css\" href=\"http://nao.s164.xrea.com/hoge.css\"><STYLE TYPE=\"text/css\">@import url(http://nao.s164.xrea.com/hoge.css);</STYLE>"; print "</head><body>\n"; $uri = $ENV{'REQUEST_URI'}; $oldsvr = $ENV{'SERVER_NAME'}; $newsvr = "nao.s164.xrea.com"; print << "HEADER"; <h2>このコンテンツは以下に移転しました</h2> http://$oldsvr$uri<br> は<br> <a href="http://$newsvr$uri">http://$newsvr$uri</a><br> に移転しました. <p> <a href="http://$newsvr">Top Page</a> <hr> <address>nao(at)s164.xrea.com</address> HEADER print "</body></html>\n";
つまり REQUEST_URI で移転先を生成しているというわけだ.難点は,本当にもともと存在しない URI を指定されてもリンク先を生成してしまうという点だけど,まあそれはほっとけばいいかな(ぉ
HEAD -S で確認したらちゃんと 404 が返っていることがわかったので,bot ももう来なくなるだろう.