2011-12-14 10 views
2

私はApache 2.2.XとPHP 5.2.X(Apacheモジュールとしてインストール)を使用して新しいWebサイトを構築しています。私はどのように処理しようとしているのかをお伝えしたいと思いますサーバーエラー。
ホームページの同じファイル(/index.php)を使ってカスタムエラーメッセージを表示することを考えていました。index.phpをカスタムエラーページとして使用

if (isset($_GET['error'])) 
    DrawErrorPage($_GET['error']); 
else 
    DrawHomepage(); 

すべてが魔法のように動作:

ErrorDocument 400 /index.php?error=400 
ErrorDocument 401 /index.php?error=401 
ErrorDocument 403 /index.php?error=403 
ErrorDocument 404 /index.php?error=404 
ErrorDocument 500 /index.php?error=500 

さて、私のindex.phpファイルで、私はこのようになりますいくつかのコードを持っている: これは私の.htaccessの設定です。
まあ、私が修正できない問題以外のすべて:Apacheに500のステータスコード(例えば、.htaccessに不正なコードを挿入する)を強制すると、 "/index.php"にリダイレクトされません?error = 500 "、代わりにデフォルトの500エラーページが表示されます。その他のステータスコード(たとえば、403または404)では、私の設定は完全に完全に機能します。

しかし、今私は疑いがあり、エラーを処理するために別のページを使用するほうが良いと思い始めています(たとえば、 "/error.php")。
"DrawHomepage()"は "robots"メタタグを "index、follow"に設定する必要がありますが、 "DrawErrorPage()"は "noindex、nofollow"に設定する必要があります。右?だから... Webクローラーが私のホームページに初めてアクセスしたときにエラー応答を受け取ったらどうなるでしょうか? Webクローラーが最初に私のホームページを訪れたのは200人でしたが、1ヶ月後に500人が訪れた場合はどうなりますか?エラーを表示していても、「ロボット」メタタグを「索引付け」し続けるとどうなりますか?

この問題の回避策、解決策はありますか?あなたならどうしますか?

多くの感謝! 500のステータスコードがある場合

答えて

4

は通常、その後、Apacheはそれがに別の 500ステータスコードをその結果、あなたのindex.phpファイルを実行することはできませんアップ何かを台無しとしています。 Apacheはこのエラー・ループを何度か反復し続け、最終的には「それ以上のループはありません」と言い、独自のエラー・ページを送信します。

500ステータスコードのカスタムページを表示する唯一の安全な方法は、プレーンテキストを使用するか、サーバー上の他のものにアクセスしようとしない基本の.htmlまたは.shtmlファイルを使用することです。ページの読み込み中に500以上のステータスコードがトリガされ続ける。

通常、クローラが500に遭遇した場合、ページを一時的に無視します。 500コードは回復可能ですが、必ずしもそこにページが存在しないことを意味するものではなく、ただちにサーバーが台無しになるだけです。ボットはスマートで、ページが常にで、ページヘッダーのステータスコードがである限り、エラーコードの意味を判断できます。

header("HTTP/1.1 404 Page Not Found"); 
+1

良いノートを再送信について:

あなたがエラー文書としてPHPファイルを使用している場合、あなたはそのように、適切なページの検出を確実にするために、PHPの内部ヘッダの機能を使用して、HTTPステータスコードを再送信する必要があることを覚えておいてくださいステータスコード。 – FakeRainBrigand

+0

たとえば、私のページに403エラーを表示した場合、403ヘッダを送信する必要がありますか?クローラや一時的なエラーに関係するものは大丈夫ですが、理解していますが、ユーザが "/non-existant.gif"などを入力して "/index.php?error=400"にリダイレクトされた場合でも機能しますか?何が起こるでしょうか?クローラはindex.phpをヒットし、404ステータスコードを受け取ります...インデックスにはそれほど悪くありませんか?どちらの場合でも、どのような種類の「ロボット」メタタグを使用する必要がありますか? –

+0

ユーザーがアクセス権を持たないファイルや存在しないファイルにヒットした場合、理由は問わず、ページは実際にリダイレクトされません。アドレスバーのURLはそのままで、実行された*ファイルはApacheによって変更されます。このファイルはエラーに関するデータを保存し、カスタムページを表示できますが、ボットや誰にアクセスしてもアクセスを停止するように、適切なエラーコード(404など)を送信する必要があります。 index.phpが存在しないと言っているのではなく、アクセスしたパスが存在しないということです。ロボットのメタタグが何を意味するのか分かりません。 – animuson

関連する問題