HTTPステータスコードについてはhttp://www.asahi-net.or.jp/~AX2S-KMTN/ref/status.htmlの記載を参考にさせていただきました。
404【Not Found】をPerlで出力させたい場合は1行で済みます。
print "Status: 404 Not Found\n";
です。
例えば動的ページ生成で環境変数PATH_INFOを使用して、
http://xxxx.hp.infoseek.co.jp/bbs.cgi/数字/
が正常なアクセスだとします。
↑以外の存在しないURLにアクセスされた時に404を出力したい場合は、bbs.cgiを下記のようにすればOKです。
$path_info = $ENV{'PATH_INFO'};
if($path_info !~ /^\/\d+\/$/){print "Status: 404 Not Found\n";exit;}
exit;
のみですと、500【Internal Server Error】が出力されます。
こうすることで、存在しない例えばhttp://xxxx.hp.infoseek.co.jp/cgi-bin/bbs.cgi/1/6546
というURLへアクセスされてしまった場合の出力結果は、【インフォシーク Japanが提供しておられる約160万人が会員登録する国内最大級のホームページスペース。大容量で多機能、無料 ながらCGIの使用が可能という充実したサービス無料ホームページ作成 レンタルサーバー infoseek isweb】なら下記のようになります。
HTTP/1.1 404 Not Found
Date: Sat, 02 Sep 2006 00:19:28 GMT
Server: Apache
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>404 Not Found</TITLE>
</HEAD><BODY>
<H1>Not Found</H1>
The requested URL /x/x/x/xxxx/cgi-bin/bbs.cgi/1/6546 was not found on this server.<P>
<P>Additionally, a 500 Internal Server Error
error was encountered while trying to use an ErrorDocument to handle the request.
</BODY></HTML>
もちろん、PATH_INFOだけではなく、$ENV{'QUERY_STRING'}
でもプログラム内で出力を操作してあげればOKですね。
Webを徘徊するクローラーや不意のスパムツールなどの過負荷対策のために、動的ページの存在しないURLへの404ステータス出力設定は有用かもしれません。