[BACK] 変更履歴に戻る [TXT][DIR] [local] / public_html / cgi-bin へ移動

ファイル: [local] / public_html / cgi-bin / error.cgi (ダウンロード)
リビジョン 1.13 1970/01/01 (木) 09:00:00 JST (40年7ヵ月前) by
ブランチ: HEAD


#!/usr/local/bin/perl # 存在しないファイル、公開していないファイルなどにアクセスが # あったときに実行される CGI。 # # エラーが起こった場合この CGI スクリプトが実行されるように # .htaccess を設定しておく必要がある。 # # $Id: error.cgi,v 1.13 2005/07/06 14:35:47 68user Exp $ use strict; my $cvsid = '$Id: error.cgi,v 1.13 2005/07/06 14:35:47 68user Exp $'; my $mailaddr = '68user@X68000.startshop.co.jp'; my $base_uri = 'http://X68000.q-e-d.net/~68user'; my @cgi_ext = ("cgi"); #----------- use vars qw($whoami); require 'environment.pl'; #---------- my $error_code = $ENV{REDIRECT_STATUS}; my $you = `$whoami`; my $host = $ENV{REMOTE_HOST} || $ENV{REMOTE_ADDR}; #--------- # 外部から設定可能な変数 my $myhost = $ENV{HTTP_HOST}; $myhost =~ s/[^a-zA-Z0-9\.\-]//g; my $correcthost = 'X68000.q-e-d.net'; my $uri = $ENV{REQUEST_URI}; my $org_uri = $uri; $uri =~ s/</&lt;/g; $uri =~ s/>/&gt;/g; $org_uri =~ s/[\r\n]//g; my $referer = $ENV{HTTP_REFERER}; $referer =~ s/[\r\n]//g; my $title; my $reason; my $more_reason; if ( $ENV{QUERY_STRING} eq 'badhostname' ){ $title = "Bad Hostname"; $reason = "ホスト名 ($myhost) が不正です。"; $more_reason = "http://$myhost$uri のホスト名が不正です。"; $more_reason .= "正しい URL は http://$correcthost$uri と推測されます。"; } elsif ( $error_code eq "500" ){ $title = "500 Internal Server Error"; $reason = "内部エラーが起こりました。"; $more_reason = "http://$myhost$uri の実行ができませんでした。"; $more_reason .= "<p>おそらくCGIプログラムの不具合が原因です。"; } elsif ( $error_code eq "404" ){ $title = "404 not found"; $reason = "ファイルが見付かりませんでした。"; $more_reason = "http://$myhost$uri というファイルは存在しません。"; $more_reason .= "誤った URL が入力されたか、こちらのリンクミスと思われます。"; } elsif ( $error_code eq "403" ){ $title = "403 Forbidden"; $reason = "実行/閲覧に必要な権限がありませんでした。"; my $cgi_ext = join("|",@cgi_ext); if ( $uri =~ m|/$| ){ # ディレクトリなら $more_reason = "$uriディレクトリの一覧は見ることができませんのでご了承ください。"; } elsif ( $uri =~ m|\.($cgi_ext)$| ){ # CGIなら $more_reason = "<p>$youは$uriを実行する権限がありません。"; $more_reason .= "<p>不正な URL が入力されたか、こちらの設定ミスでしょう。"; } else { # 通常ファイルなら $more_reason = "<p>$youは$uriを読み込む権限がありません。"; $more_reason .= "<ul>\n"; $more_reason .= "<li> ログファイル (*.log) は HTTP 経由では参照できないようにしてあります。"; $more_reason .= "<li> emacs のバックアップファイル (*~) は HTTP 経由では参照できないようにしてあります。"; $more_reason .= "<li>全文検索のデータ(の一部)はあまりにもファイルサイズが大きいので、"; $more_reason .= "HTTP 経由では参照できないようにしてあります。"; $more_reason .= "</ul>\n"; $more_reason .= "<p>誤った URL が入力されたか、こちらの設定ミスと思われます。"; } } else { &put_header("error.cgi", 'EUC-JP'); print "直接 error.cgi を実行しても意味がありませんよ。"; &myfinish; # unreached } &put_header($title, 'EUC-JP'); &put_message; my $date = &get_date; &lock_on; open(LOG,">> ../log/error.log") || exit; print LOG "$date $host $error_code $org_uri $referer\n"; close(LOG); &lock_off; &myfinish; # unreached #------------------------------------------------------------------------------------------- sub myfinish { print "<P CLASS='cvsid'>$cvsid</P>\n"; print "</BODY>\n"; print "</HTML>\n"; exit 0; } #------------------------------------------------------------------------------------------- sub put_message { print <<END; <h1>エラー : $reason</h1> $more_reason <p> もし、こちらのファイル設定ミス・リンクミス・CGI の不具合などが原因で あった場合は早急に修正します。 <h2>ページマップ</h2> <table> <tr><td> <a href="$base_uri/"> $base_uri/</a></td> <td> 68user's page</td> </tr> <tr><td>  <a href="$base_uri/unix/"> $base_uri/unix/</a></td> <td>UNIX の部屋</td> </tr> <tr><td>  <a href="$base_uri/net/"> $base_uri/net/</a></td> <td>ネットワークプログラミングの基礎知識</td> </tr> <tr><td>  <a href="$base_uri/Cgi-room/"> $base_uri/Cgi-room/</a></td> <td>CGI の小部屋</td> </tr> <tr><td>  <a href="$base_uri/cgi-bin/wwwboard.cgi"> $base_uri/cgi-bin/wwwboard.cgi</a></td> <td>掲示板</td> </tr> </table> <hr> このエラー表示は、 <UL> <LI><a href="$base_uri/cgi-bin/cvsweb.cgi/public_html/.htaccess?rev=HEAD&amp;content-type=text/x-cvsweb-markup">.htaccess</a> (<a href="$base_uri/cgi-bin/cvsweb.cgi/public_html/.htaccess?content-type=text/x-cvsweb-markup">更新履歴</a>) <LI><a href="$base_uri/cgi-bin/cvsweb.cgi/public_html/cgi-bin/error.cgi?rev=HEAD&amp;content-type=text/x-cvsweb-markup">error.cgi</a> (<a href="$base_uri/cgi-bin/cvsweb.cgi/public_html/cgi-bin/error.cgi?content-type=text/x-cvsweb-markup">更新履歴</a>) </UL> を利用して実現しています。 END }