web-dev-qa-db-ja.com

403エラーページをエミュレートする

このページが次のように禁止されていることをブラウザに伝えるヘッダーを送信できることを知っています。

header('HTTP/1.0 403 Forbidden');

しかし、このタイプのエラー用にサーバーで作成されたカスタムエラーページをどのように表示できますか?

デフォルトでは、ヘッダーを送信するだけで白いページが表示されますが、顧客のエラーページを使用できることをしばらく読んで覚えています。誰か知っていますか?

55
NightHawk

ヘッダーを変更した後、カスタムエラーページを含めます。

20

ヘッダーを送信した後、コンテンツをエコーし​​ます。

header('HTTP/1.0 403 Forbidden');

echo 'You are forbidden!';

forbidden

56
alex

http_response_code はPHP 5.4で導入され、物事がずっと簡単になりました!

http_response_code(403);
die('Forbidden');
32

このためには、まずブラウザに対してユーザーがエラー403を受け取ったことを伝える必要があります。このためには、次のコードを使用できます。

header("HTTP/1.1 403 Forbidden" );

次に、スクリプトは「エラー、エラー、エラー、エラー、エラー.......」を送信するため、停止する必要があります。使用できます

exit;

この2行で、サーバーはエラーを送信し、スクリプトを停止します。

忘れないでください:エラーをエミュレートしますが、.htaccessファイルに設定する必要があります。

ErrorDocument 403 /error403.php
19
Pyrrha

多くの答えを見ましたが、正しいものは、PHPマニュアルに従ってヘッダー関数呼び出しの完全なオプションを提供することです

void header ( string $string [, bool $replace = true [, int $http_response_code ]] )

で呼び出す場合

header('HTTP/1.0 403 Forbidden', true, 403);

apacheまたは他のサーバーで構成されたHTTP 403の通常の動作が続きます。

6

.htaccess

ErrorDocument 403     /403.html
4
user557846

私はここですべての答えを読みましたが、私の状況に対する完全な答えではありませんでした(この質問ではまったく同じです)ので、提案された答えの一部を集めて正確な解決策を考え出す方法は次のとおりです:

  1. サーバーの実際の403ページに移動します。 (サーバー上の禁止URLにアクセスするか、任意の403ページにアクセスしてください)
  2. 右クリックして、「ソースの表示」を選択します。すべてのソースを選択し、次のようにドメイン上のファイルに保存します。 http://domain.com/403.html
  3. 次に、実際の禁止ページ(またはPHPの一部の禁止状況)の例に移動します。例: http://domain.com/members/this_is_forbidden.php
  4. 以下のコードをエコーbeforeHTML出力またはヘッダー! (空白であってもPHPがHTML/TEXT HTTPヘッダーを送信し、動作しません)以下のコードはあなたの最初の行でなければなりません

        <?php header('HTTP/1.0 403 Forbidden');
        $contents = file_get_contents('/home/your_account/public_html/domain.com/403.html', TRUE);
        exit($contents);
    

これで、正確なソリューションが得られました。 CPANEL Latest Visitorsで確認および検証を行いましたが、正確な403イベントとして登録されています。

3
Tarik

サーバーの義務を最小限に抑えるには、サーバーを単純にします。

。htaccess

ErrorDocument 403 "Forbidden"

[〜#〜] php [〜#〜]

header('HTTP/1.0 403 Forbidden');

die(); // or your message: die('Forbidden');
2
virtual_cia

ModRewriteを使用します。

RewriteRule ^403.html$ - [F]

Wwwルートに「403.html」という空のドキュメントを作成してください。作成しないと、403ではなく404エラーが発生します。

2
Jay Sudo

Apache confまたは.htaccess内でErrorDocumentが既に定義されているシナリオがあり、php経由で4xxステータスコードを手動で送信するときにこれらのページを表示したいことを理解しています。

残念ながら、これは一般的な方法では不可能です。なぜなら、phpはヘッダーをユーザーのブラウザー(Apache Webサーバーではなく)に直接送信するのに対し、ErrorDocumentはApacheから生成されたhttpステータスの表示ハンドラーだからです。

1
labemi