0

一部の Web ページは、実際に私のデータベースに含まれています。私は次のhtaccessを持っています

ErrorDocument 404 /error404.php

私のerror404はrequire("checkdb.php"); 、ファイル名がMySQL dbで表されているかどうかを確認します。だったら200OK返して内容を吐き出したい。そうじゃないなら404を吐き出したい

私の問題は、404 で立ち往生していることです。私のページは適切に表示されますが、検索エンジンによって取得されず、Google+ が機能せず、ページのチェックが行われ、404 が返されます。

私は追加しました

header('HTTP/1.1 200 OK'); 

データベースをチェックした直後(HTMLコードはまだ表示されていません)ですが、

警告。ヘッダー情報を変更できません - ヘッダーは既に送信されています ....

header()最初にそれを動かしても、/error404.php まだそのエラーが発生します。Apache は最初に 404 を返し、次に呼び出すようです。/error404.php

これを適切に修正するにはどうすればよいですか? よろしくお願いします!

4

2 に答える 2

1

Apacheがで指定されたドキュメントを送信するときErrorDocument、それは通常のページとして提供されておらず、すでに404ヘッダーを送信しています。ErrorDocumentApacheでディレクティブを使用する代わりに、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構成からディレクティブを削除します。

于 2011-09-10T20:24:04.403 に答える
0

ヘッダー行は、出力の前にある必要があります。いくつかのコードがなければ、出力がどこから来ているのかを指摘する方法はありません。

于 2011-09-10T20:19:52.187 に答える