2

したがって、私の .htaccess ファイルには、次の ErrorDocument 行があります。

ErrorDocument 500 http://www.example.com/500

私のサーバーは同じコア ファイルから複数の Web サイトを実行しているため、すべての内部サーバー エラーを同じ処理ページにリダイレクトしたいだけです。ただし、私の問題は、エラーの原因となるページに関する情報を送信せず、ページをリダイレクトすることです。に変更しようとしましたErrorDocument 500 index.php?500が、ファイルを見つけようとすると、2 番目の内部サーバー エラーが発生するだけです。カスタム500エラーページに正常にリダイレクトし、最初にエラーを引き起こしたページに関する情報を取得する方法についてのアイデアはありますか?

4

4 に答える 4

3

ステートメントでは、ErrorDocumentリモート ページへの URL を指定しています。その結果、Apache はユーザーに Location ヘッダーを送信し、ユーザーは楽しい道を歩み始めます。

代わりに、エラーを処理するローカル スクリプトへの絶対パスに URL を変更します。

ErrorDocument 500 /500.php

スクリプトは、エラーに関連するさまざまなパスとクエリ文字列を含む REDIRECT_ で始まる一連の環境変数を使用して起動する必要があります。

ユーザーを別の場所に送信する方法と、ErrorDocument 自体の情報を取得する方法はありません。一方、何らかの理由でそのように処理したい場合は、スクリプトで情報をキャプチャしてからユーザーをリダイレクトできます。

于 2010-07-19T18:48:34.203 に答える
1

http リクエストのフィールドをいつでも調べてreferrer、呼び出し元が以前にどの URL にいたかを判断できます。

于 2010-07-19T19:01:50.670 に答える
0

あなたのApacheサーバーは、エラーが発生するたびにログに記録します(構成可能ですが)。PHP Web サイトでFileStreamを使用して、このファイルを開いて管理できます。Apache ログ ファイルの詳細については、http://httpd.apache.org/docs/2.2/logs.htmlを参照してください。http://www.freewebmasterhelp.com/tutorials/htaccess/から .htaccess のチュートリアルを取得できます。

独自の処理を行うには、エラーを処理する error.php のような PHP ファイルを作成します。.htaccess ファイルを使用してリダイレクトできます。その後、ページに移動したい場合は、header()メソッドを使用してそれを行うことができます。

于 2010-07-20T14:36:27.883 に答える
0

Web サーバーのアクセス ログを確認します。そこで、500 応答コードの原因となっている要求を確認できます。

Apache (デフォルトのログ形式を使用) では、成功した要求 (200 OK) は次のようになります。

127.0.0.1 - - [19/Jul/2010:18:25:54 +0200] "GET / HTTP/1.1" 200 663 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8pre) Gecko/20100718 Ubuntu/10.04 (lucid) Namoroka/3.6.8pre"

500 を返すリクエストは次のようになります。

127.0.0.1 - - [19/Jul/2010:18:24:37 +0200] "GET / HTTP/1.1" 500 631 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8pre) Gecko/20100718 Ubuntu/10.04 (lucid) Namoroka/3.6.8pre"

応答コードは 6 列目にあります。

また、PHP エラー ログを確認することもできます。これには、エラー ログを有効にしている場合 (有効にする必要があります)、すべての PHP エラーが含まれます。

于 2010-07-19T16:27:36.497 に答える