2

典型的なシナリオ:

  1. DBアイテムはページに表示されますhttp://...?item_id=467
  2. ユーザーはある日 アイテムを削除します
  3. Google またはユーザーがアクセスを試みるhttp://...?item_id=467
  4. PHP は DB を掘り下げ、アイテムがもう存在しないことを確認するため、PHP は 404 ヘッダーとページを介してアイテムが存在しないことを Google/ユーザーに通知する必要があります。

この回答によると、コードで404ヘッダーを送信し、デフォルトの404ページのすべてのコンテンツを読み取ってクライアントに送信しない限り、PHP経由で404 Apacheページにリダイレクトする方法はないことを理解しました。

問題: 私はすでにApache で解析されたカスタム404.shtmlページを持っているので、単純にそのページを使用したいと思います。しかし、PHP 経由で shtml ページを読み取ると、Apache によって解析されなくなります

それで、あなたは私に何をするように提案しますか?

htaccessでも使用できるトリックはありますか?

ありがとう、

4

4 に答える 4

4

うーん。次の 2 つのアイデアが思い浮かびます。

  • を使用して 404 ページにリダイレクトしますが、header("Location:...")これは標準に準拠した動作ではありません。私はそれを最後のストローとしてのみ使用します

  • を使用して、Apache で解析された SHTML ファイルを取得して出力します。これfile_get_contents("http://mydomain.com/404.shtml");も、要求が Web サーバーに対して行われるため最適ではありませが、ほとんどの場合は許容できると思います。

.htaccess書き換えルールが既に解析された後に PHP スクリプトが実行されるため、何かできることはないと思います。

于 2010-11-20T11:07:14.923 に答える
2

Apache mod_php を使用virtual('/404.shtml');している場合は、解析された shtml ページをユーザーに表示するために使用します。

于 2010-11-20T12:00:01.927 に答える
0

私は昨日これとまったく同じことをやろうとしていました。

Pekka の file_get_contents/include により、404 ステータス ヘッダーが送信されますか? カスタム エラー ページを含める前に、これを行う必要があるのではないでしょうか?

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");

この Firefox 拡張機能を使用してテストできます。

于 2010-11-20T11:55:23.543 に答える