使用看起来相当标准的东西:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php [L]所有请求都转到index.php文件进行处理(除非Apache已经可以看到磁盘上的文件)。
但是,如果脚本确定请求的URL不存在(404),那么如何将其记录到Apache中?
脚本返回一个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由于服务器托管了多个网站,我希望它们都使用相同的机制来记录这些错误(而不是必须在PHP中写入第二个日志文件,或者尝试让PHP fopen/fread/fclose这个Apache可能已经锁定的文件)。
发布于 2012-08-13 17:55:12
您可以写入stderr,因为apache会捕获它并将其附加到自己的错误日志中:
$stderr = fopen('php://stderr', 'w');
fwrite($stderr, 'My error');
fclose($stderr);您还可以在php.ini中取消设置error_log指令,这将导致将每个PHP错误附加到ErrorLog。
发布于 2012-08-13 22:49:54
我还发现,在<VirtualHost>上写入"php://stderr“不会写入该虚拟主机的ErrorLog,而是写入主Apache错误日志。
但是,还有PHP函数error_log()。
error_log('File does not exist: ' . XXX, 4);4表示它转到Apache (SAPI日志处理器),而不是php error_log文件。
https://stackoverflow.com/questions/11931806
复制相似问题