首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用重写规则/ ErrorLog时写入Apache (404)

问使用重写规则/ ErrorLog时写入Apache (404)
EN

Stack Overflow用户
提问于 2012-08-13 17:49:01
回答 2查看 507关注 0票数 0

使用看起来相当标准的东西:

代码语言:javascript
复制
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php [L]

所有请求都转到index.php文件进行处理(除非Apache已经可以看到磁盘上的文件)。

但是,如果脚本确定请求的URL不存在(404),那么如何将其记录到Apache中?

脚本返回一个404标头:

代码语言:javascript
复制
HTTP/1.1 404 Not Found

但是错误日志仍然是空的,而访问日志显示404:

代码语言:javascript
复制
192.168.2.2 - - [13/Aug/2012:10:39:35 +0100] "GET /404 HTTP/1.1" 404 32958

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-13 17:55:12

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

代码语言:javascript
复制
$stderr = fopen('php://stderr', 'w'); 
fwrite($stderr, 'My error'); 
fclose($stderr);

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

票数 1
EN

Stack Overflow用户

发布于 2012-08-13 22:49:54

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

但是,还有PHP函数error_log()。

代码语言:javascript
复制
error_log('File does not exist: ' . XXX, 4);

4表示它转到Apache (SAPI日志处理器),而不是php error_log文件。

http://php.net/error_log

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11931806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档