home «前の日記(2007-05-04) 最新 次の日記(2007-05-06)»

いろいろ
Seize the day.

2004|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|07|09|10|

2007-05-05 [長年日記]

[blog] 移転先へのリンクを生成する 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 ももう来なくなるだろう.
本日のツッコミ(全2件) [ ツッコミ | permalink | trackback ]
* itochan (2008-03-25 15:20)

404ではなくて301(Moved Permanently)の方が適切なのでは?

* nao (2008-03-25 23:25)

コメントどうもです.当時,ご指摘どおり 301 も検討したのですが,
URI が変わったということを認識して欲しかったのであえて 404 にしたという経緯があります.
ただ,今になって考えるとやはりクライアントにとっては
クリックの手間も増え,親切とはいえないので,
確かに 301 のほうが良いような気もしてきました.ちょっと検討してみます.

このエントリーをはてなブックマークに追加 はてなブックマーク数 はてなブックマークコメント   このエントリーを livedoor クリップに追加 livedoor クリップ数 このエントリーを del.ici.ous に追加 このエントリーを buzzurl に追加 buzzurl クリップ数

お名前:
E-mail:
コメント:
[TrackBack URL: http://nao.s164.xrea.com/td/tb.rb/20070505]
[(注) スパム対策のため,言及リンクのないトラックバックは受け付けていません.]

以下の広告はサーバによって自動的に挿入されています.


Copyright © 2004-2006, nao. All rights reserved.