0

一部のWebページは実際に私のデータベースに含まれています。 私は、次の404のためにhtaccessでheader()を使用しています

ErrorDocument 404 /error404.php 

マイerror404でhtaccessファイルを持っているが、ファイル名がMySQLのデシベルで表現されているかどうかを確認require("checkdb.php"); を行います。もしそうなら、私は200 OKを返して内容を吐き出したいと思う。 そうでない場合、私はそれを吐きたい404

私の問題は私が404に固執しています。私のページが正しく表示されている間は、検索エンジンで取り上げられず、Google +が動作しませんそれは、ページのチェックを行い、それが404

を取得し、私は(何のhtmlコードがまだ表示されていない)、右データベースにチェックした後

header('HTTP/1.1 200 OK'); 

を追加しましたが、私は

を取得します

警告。ヘッダー情報を変更することはできません - すでにによって送られたヘッダ....

私は、私はまだそのエラーを取得し/error404.phpの初めにそのheader()右に移動した場合でも。 Apacheが404を最初に返してから/error404.php

これを正しく修正するにはどうすればよいですか? ありがとうございました!

+0

この質問の最初の回答は、あなたのhttp://stackoverflow.com/questions/5190206/apache-htaccess-how-do-i-redirect-for-files-that-arent-found-without -sending-a – Oylex

答えて

1

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

そして、あなたのApacheの設定からErrorDocumentディレクティブを削除します。

+0

「ページ」は [リンク](http://listorm.com/M22mun6xJ) のようなもので、これは記載されているとおりです。動的に作成される多くの偽のページがあります。 404の代わりにErrorDocument 404で200 OKを得るという不満をフォーラムで多くのWebサイトデザイナーが見てきました。私は404の代わりに200 OKをしたい。 – Samuel

0

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

+0

上記のように、/error404.phpの最初の行にheader()を設定してテストを試みました。私たちが何かをする前に、Apacheが404を送信しているように聞こえますか? – Samuel

+0

また、ヘッダーが設定される前に、DBをチェックする必要があると述べました。それはそこに簡単に入ることができます。どちらのファイルの最上部(またはrequire'dファイルの最下部)のスペースのように小さいものでもかまいません。チェックアウトするコードは一切ありませんが、わかりません。 –

関連する問題