0

かなり標準的と思われるものを使用する:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php [L]

すべてのリクエストは、処理するためにindex.phpファイルに送られます(Apacheがディスク上のファイルをすでに認識している場合を除く)。

しかし、スクリプトが要求されたURLが存在しないと判断した場合(404)、これをApache ErrorLogに記録するにはどうすればよいですか?

スクリプトは404ヘッダーで返されます。

HTTP/1.1 404 Not Found

ただし、エラーログは空のままですが、アクセスログには404が表示されます。

192.168.2.2 - - [13/Aug/2012:10:39:35 +0100] "GET /404 HTTP/1.1" 404 32958

サーバーは複数のWebサイトをホストしているので、これらのエラーを記録するためにすべて同じメカニズムを使用するようにします(PHPで2番目のログファイルに書き込む必要はなく、PHPに同じファイルをfopen / fread /fcloseさせようとするのではありません)そのApacheはすでにロックされている可能性があります)。

4

2 に答える 2

1

apacheがこれをキャッチし、独自のエラーログに追加するため、stderrに書き込むことができます。

$stderr = fopen('php://stderr', 'w'); 
fwrite($stderr, 'My error'); 
fclose($stderr);

error_logでディレクティブの設定を解除することもできますphp.ini。これにより、すべてのPHPエラーがに追加されErrorLogます。

于 2012-08-13T09:55:12.160 に答える
1

また、で「php:// stderr」に<VirtualHost>書き込むと、その仮想ホストErrorLogには書き込まれず、代わりにメインのApacheエラーログに移動することもわかりました。

ただし、PHP関数error_log()もあります。

error_log('File does not exist: ' . XXX, 4);

error_log4は、phpファイルではなくApache(SAPIロギングハンドラー)に移動することを意味します。

http://php.net/error_log

于 2012-08-13T14:49:54.133 に答える