不正なIPをMySQLテーブルに追加するphp関数があります。
私のサイトの各ページはテーブルをチェックし、一致が見つかった場合はHTTP 401ヘッダーをスローします。
if(badCrawler()){
header("HTTP/1.1 401 Unauthorized");
header("Location: error401.php");
}
URLを変更せずにこれを行うことは可能ですか?
ありがとう
承知しました。 401ヘッダーの直後のexit
。 header("Location...")
はまったく必要ありません。
if(badCrawler()){
header("HTTP/1.1 401 Unauthorized");
exit;
}
サイドノート:401は通常、認証要求と組み合わせて使用されます。
仕様 から:
応答には、要求されたリソースに適用可能なチャレンジを含むWWW-Authenticateヘッダーフィールド(セクション14.47)を含める必要があります
403 Forbidden
を使用してアクセスを拒否するか、悪いクローラーにページがもう存在しないと思わせたい場合は404 Not Found
を使用する方がよい場合があります。
header("HTTP/1.0 404 Not Found");
exit;
一部のブラウザでは、404応答が空白ページになる場合があることに注意してください。これが発生する理由の完全な説明については、 this thread のトップアンサーを参照してください。基本的にヘッダーは機能していますが、HTMLコンテンツを表示するのはユーザー次第です)。
解決策は簡単で、exit
ステートメントの直前にコンテンツをエコーします(または別のファイルを含めます)。
これは少し古いことを知っていますが、「php、401s」のグーグル検索でポップアップしました。
ここでの問題は、ページがerror401.phpにリダイレクトするときにthat pageが200 OKを返すことです。error401.phpが正常にロードされたためです。本当に401ページを表示したい場合、これはどうですか?
if(badCrawler()){
header("HTTP/1.1 401 Unauthorized");
include("error401.php");
exit;
}