ローカルの開発マシンに、Windows 7 で動作する Apache 2.2.16 と PHP 5.3.5 を含む PDT + Zend Server をダウンロードしました。私の PHP では、ユーザーが存在しないドキュメントを要求したときに、header("Http/1.0 404 Not Found") を使用します。私のローカルサーバーでは、すべてがうまく機能します。カスタムの ErrorDocument が表示され、満足しています。
Linux サーバーで Apache 2.2.38 と PHP 5.3.8 を実行している共有ホストにすべてをアップロードすると、突然、ErrorDocuments が PHP からのものでない場合にのみ機能します。
PHP.ini、httpd.conf、または .htaccess に、Apace が PHP からのエラー コードを認識できるようにする設定がありますか?
これを調査したところ、「Apache は、いったん PHP に渡されたステータス コードを認識しない」ということしかわかりませんでした。このような場合、開発サーバーが正しく動作するのはなぜですか?
編集
わかりやすくするために、.htaccess を次に示します。
# Use PHP 5.3
Action application/x-hg-php53 /cgi-sys/php53
AddHandler application/x-hg-php53 .php
#Deny Include Files
<Files *.inc>
order deny,allow
deny from all
</files>
#Provide custom error documents
ErrorDocument 404 /Errors/Http404.php
ErrorDocument 403 /Errors/Http403.php
ErrorDocument 500 /Errors/Http500.php
ユーザーが myhost.com/jdkslfjdls に移動すると、ユーザーは Errors/Http404.php のコンテンツを受け取るため、.htaccessが機能します。
ただし、ユーザーが myhost.com/images/GetImage.php?Id=5 に移動すると (画像 #5 がない場合)、ユーザーはコンテンツを受け取りません。
(内部 IP アドレス)/images/GetImage.php?Id=5 に移動すると、ユーザーは Errors/Http404.php の内容を受け取ります。
ユーザーが GetImage.php?Id=6 にアクセスしようとすると、同様の問題が発生します (画像 #6 があるが権限がない場合)。共有サーバーでは、空白のページまたはブラウザーの 403 エラーが表示されます。私の開発サーバーでは、実際のカスタム 403 エラー ページが表示されます。
繰り返しますが、.inc ファイルにアクセスしようとすると、共有サーバーで 403 エラー ドキュメントが機能します。