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

由于服务器托管了多个网站,我希望它们都使用相同的机制来记录这些错误(而不是必须在 PHP 中写入第二个日志文件,或者尝试让 PHP 对同一个文件进行 fopen/fread/fclose Apache 可能已经锁定)。

4

2 回答 2

1

您可以写入 stderr,因为 apache 会捕获它并将其附加到自己的错误日志中:

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

您还可以取消设置 中的error_log指令php.ini,这将导致每个 PHP 错误都附加到ErrorLog.

于 2012-08-13T09:55:12.160 回答
1

还发现在 a 上写入“php://stderr”<VirtualHost>不会写入该虚拟主机ErrorLog,而是转到主 Apache 错误日志。

然而,还有 PHP 函数 error_log()。

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

4 表示它转到 Apache(SAPI 日志记录处理程序),而不是 phperror_log文件。

http://php.net/error_log

于 2012-08-13T14:49:54.133 回答