404にhtaccessにheader()を使用していない
-
28-10-2019 - |
質問
いくつかのWebページは、実際には私のデータベースに含まれています。私は次のようなhtaccessを持っています
ErrorDocument 404 /error404.php
私のerror404 do a require("checkdb.php");
ファイル名がMySQL DBで表されているかどうかを確認します。もしそうなら、私は200 OKを返して、コンテンツを吐き出したいです。そうでない場合、私はその404を吐き出したい
私の問題は、404で立ち往生していることです。私のページが適切に表示されている間、検索エンジンによってピックアップされず、Google+が機能しないことがページのチェックを行い、404を取得します。
私は追加しました
header('HTTP/1.1 200 OK');
データベースにチェックインした直後に(HTMLコードはまだ表示されていません)が、
警告。ヘッダー情報を変更できません - すでに送信されているヘッダー...
私がそれを動かしても header()
の最初に /error404.php
私はまだそのエラーがあります。 Apacheが最初にその404を返してから電話をかけるように聞こえます /error404.php
これを適切に修正するために何ができますか?よろしくお願いします!
解決
Apacheが指定されたドキュメントを送信したとき ErrorDocument
, 、それは通常のページとして提供されておらず、すでに404ヘッダーを送信しています。を使用する代わりに ErrorDocument
Apacheの指令では、代わりにPHPスクリプトを使用して、最初にドキュメントが存在するかどうかを確認する必要があります。それが存在しない場合、PHPは404エラーヘッダー自体を送信します。
以下は、error404.phpではなく、index.phpのような通常のスクリプトで行われます。
// Do whatever you're doing to check
require("checkdb.php");
// If the check fails, PHP sends the 404:
header("HTTP/1.0 404 Not Found");
// Then display your custom error document with PHP
// You can display the other contents of error404.php
echo "Oops, page wasn't found!";
exit();
を削除します ErrorDocument
Apache構成からの指令。
他のヒント
ヘッダーラインは以前に必要です どれか 出力。いくつかのコードがなければ、出力がどこから来ているのかを指摘する方法はありません。