タグ: .htaccess
404 not found – error.cgi
- 2009-04-20 (月)
- Web
とりあえずエラーページを用意してみました。いわゆる 404 Not Found とかいうアレです。
なぜって?ディレクトリ内の丸見えを防ぎたかったんです
使っているサーバはさくらインターネットのレンタルサーバ スタンダードプランで、さくらは .htaccess で設定をいぢることはできるんですが、Options が使えない。なのでインデックスファイルが存在しないディレクトリを開いた時に中身が丸見えになるのを防ぐには、Options を使わずに違うアプローチが必要になる。公式サポートのひみつのフォルダにあるファイルの一覧を見られないようにしたいというページでは DirectoryIndex を使ってインデックスファイルの設定の最後にエラーページを指定して、インデックスファイルが存在しない場合はエラーページに飛ばす方法が書かれていました。まあ、この方法を使うことにしたわけですが、ただエラーページを用意しただけじゃつまらないので色々と細工をしてみました。
めんどくさいことは Perl に投げちゃお
細工と言っても単純で、エラーコード 404 だけでなく 403 や 500 にも対応できるように、エラーページを Perl スクリプトにして動的に出力してやることにしました。
ステータスコードは検索ロボットたちに優しいんです
Perl スクリプトにすることでステータスコードをきちんと返すことができるようになる。きちんとステータスコードを出力することによって、エラーを、人にだけでなく Google や Yahoo などの検索ロボットにも伝えることができるので、結果的に検索から訪れる人に対してのエラーを減らすことができる。
真っすぐな視線には弱いんです
なお、当初の目的である、インデックスファイルがない時に error.cgi へ飛ばした場合ですが、error.cgi へ直接アクセスされることになります。なので、直接 error.cgi へアクセスがあった時はエラー 404 を返し、ファイルは存在しませんよと偽装することにしました。
- error.cgi の大まかなサンプルコード
-
my $error_code = $ENV{REDIRECT_STATUS}; # エラー 500 (Internal server error) の場合 if ( $error_code eq "500" ){ # エラー 404 (File not found) の場合 } elsif ( $error_code eq "404" ){ # エラー 403 (Permission denied) の場合 } elsif ( $error_code eq "403" ){ # error.cgi への直接リンクの場合 } else { # 404 を偽装しステータスコードも 404 を返す print "Status: 404 Not Found\n"; }
- .htaccess の中の関連する項目
-
#----------------------------------------------- # インデックスファイル DirectoryIndex index.cgi index.php index.xhtml index.shtml index.html /error/error.cgi #-------------------------------------------------- # エラー400 (Bad Syntax) リクエストの方法が違います # エラー401 (Authorization Required) 認証に失敗しました # エラー403 (Permission denied) アクセス権限がありません # エラー404 (File not found) 該当するページが見つかりません # エラー500 (Internal server error) 内部サーバーエラー(主にCGIなどの誤り) #ErrorDocument 400 /error/400.php #ErrorDocument 401 /error/401.php ErrorDocument 403 /error/error.cgi ErrorDocument 404 /error/error.cgi ErrorDocument 500 /error/error.cgi
- error.cgi の実行結果例
エラーページ作成にあたって 68user’s page 内の error.cgi を参考にしました。
- Comments: 0
- Trackbacks: 0
- Recent Comments
-
- フッターの著作権 (Copyright) 表記 に WORK NOTE BLOG より
- WordPress のコメント投稿を Ajax 化し便利にしてくれる Quick Comments に ああ より
- MBP 13-inch + Parallels 5 で Windows 7 のベンチマークテスト に PC を Windows XP から Windows 7 にアップグレード - べたろぐ。 より
- iMac G5 20-inch と MacBook Pro 13-inch のベンチマーク比較 に MBP 13-inch + Parallels 5 で Windows 7 のベンチマークテスト - べたろぐ。 より
- wp.Vicuna のサイドバーのカテゴリーとアーカイブに記事数を表示 に ITめもりーにょ より
- WordPress のコメント投稿を Ajax 化し便利にしてくれる Quick Comments に 匿名 より
- wp-tmkm-amazon の Amazon API 認証対応版 + 文法エラー修正 に WordPress で Amazon の商品情報を表示するプラグイン wp-tmkm-amazon + α - べたろぐ。 より
- WordPress のコメント投稿を Ajax 化し便利にしてくれる Quick Comments に beta より
- まな板立てをスタンドにして MacBook Pro 13-inch を立てて置く に ゅぅ より
- WordPress のコメント投稿を Ajax 化し便利にしてくれる Quick Comments に さんきゅう より
- Search
- Feeds
- Meta





