2

新しい Web サイトを構築するために Apache 2.2.X と PHP 5.2.X (Apache モジュールとしてインストール) を使用しています。サーバー エラーの処理方法に関する提案を読みたいと思います。
ホームページの同じファイル (/index.php) を使用して、カスタム エラー メッセージを表示することを考えていました。これは私の .htaccess 設定です:

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 ファイルには、次のようなコードがあります。

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

すべてが魅力のように機能します。
まあ、修正できない 1 つのことを除いてすべて: Apache に 500 ステータス コードを返すように強制すると (たとえば、.htaccess に不正な形式のコードを挿入するなど)、"/index.php? error=500" ですが、代わりにデフォルトの 500 エラー ページが表示されます。他のステータス コード (403 や 404 など) の場合、構成は完全に機能します。

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

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

どうもありがとう!

4

1 に答える 1

4

通常、500 ステータス コードがある場合は、Apache が何かを台無しにしており、index.php ファイルを実行できず、別の500 ステータス コードが返されます。Apache は、このエラー ループを数回繰り返してから、最終的に「もうループはありません」と言って独自のエラー ページを送信します。

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

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

PHP ファイルをエラー ドキュメントとして使用する場合は、PHP 内のヘッダー関数を使用して HTTP ステータス コードを再送信し、適切なページ検出を保証する必要があります。次のようにします。

header("HTTP/1.1 404 Page Not Found");
于 2011-12-14T01:05:02.107 に答える