Ste*_*ier 1 codeigniter http-status-code-404
例如,在我的日志中,我有许多重复的行,例如:
ERROR - 2011-07-06 09:19:01 --> 404 Page Not Found --> favicon.ico
Run Code Online (Sandbox Code Playgroud)
有没有办法让我找出谁在调用这些错误的URL?favicon只是一个例子,有一些URL例如显示出攻击的意图,而其他URL则是一遍又一遍地重复相同的错误.基本上我很想知道哪些IP可能会阻塞,以及如果他们有错误的链接会联系哪些网站(或者我应该只使用.htaccess将它们重定向到我的服务器上).
如果您认为需要这样做,只需扩展Exceptions类并覆盖该show_404()函数:
// v2.x: core/MY_Exceptions.php
// v1.x: libraries/MY_Exceptions.php
class MY_Exceptions extends CI_Exceptions {
/**
* 404 Page Not Found Handler
*
* @access private
* @param string
* @return string
*/
function show_404($page = '', $log_error = TRUE)
{
$heading = "404 Page Not Found";
$message = "The page you requested was not found.";
// By default we log this, but allow a dev to skip it
if ($log_error)
{
// Custom code here, maybe logging some $_SERVER variables
// $_SERVER['HTTP_REFERER'] or $_SERVER['REMOTE_ADDR'] perhaps
// Just add whatever you want to the log message
log_message('error', '404 Page Not Found --> '.$page);
}
echo $this->show_error($heading, $message, 'error_404', 404);
exit;
}
}
Run Code Online (Sandbox Code Playgroud)
如果你继续得到类似的东西favicon.ico,这很有可能这是你的错,所以你可能想要研究一下.
只是为了澄清:
$_SERVER['HTTP_REFERER']会给您请求的页面的URL 从,所以你可以看到该请求来自于哪里,无论是在您的网站或其他地方.$_SERVER['REMOTE_ADDR'] 应该给你提出请求的IP地址http://php.net/manual/en/reserved.variables.server.php
简要示例:
if ($log_error)
{
$msg = '';
if (isset($_SERVER['HTTP_REFERER']))
{
$msg .= 'Referer was '.$_SERVER['HTTP_REFERER'];
}
else
{
$msg .= 'Referer was not set or empty';
}
if (isset($_SERVER['REMOTE_ADDR']))
{
$msg .= 'IP address was '.$_SERVER['REMOTE_ADDR'];
}
else
{
$msg .= 'Unable to track IP';
}
log_message('error', '404 Page Not Found --> '.$page.' - '.$msg);
}
Run Code Online (Sandbox Code Playgroud)