blosxomと404 #2

やはり存在しないエントリにアクセスしようとした場合、Statusで404 Not Foundを返したい。いろいろやってみて、404 Not Foundを返しつつ、サイトの独自404ドキュメントと同じものを出力するようにできました。かなり怪しいというか強引。

改造するところはblosxomと404で改造したところと同じで、オリジナルのままだと394行目辺り。そこに以下のコードを挿入します。

# No matching entries treated as a 404 Not Found
if ($ne eq $num_entries) {
	if (open(FH, "/www_root/john/public_html/404.html")) {
		print header(
			-type    => 'text/html',
			-charset => 'UTF-8',
			-status  => '404 Not Found',
		);

		foreach (<FH>) {
			print $_;
		}

		close(FH);
	} else {
		print redirect("http://example.com/john/404.html");
	}

	exit;
}

サイトの独自404ドキュメントを開いた後、Statusヘッダを追加してヘッダを普通に出力。その後、サイトの独自404ドキュメントの内容をそのまま出力してやるという感じ。ファイルを開くのに失敗した時は、redirectでフォロー。

マジで強引過ぎ。てか、これで良いのか?やりたいことは出来ているので良いことにしよう。