Codeigniter 404错误 - 如何判断它们来自何处?

时间:2011-07-06 18:10:28

标签: codeigniter http-status-code-404

例如,在我的日志中,我有许多重复的行,例如:

ERROR - 2011-07-06 09:19:01 --> 404 Page Not Found --> favicon.ico

有没有办法让我找出谁在调用这些错误的网址? favicon只是一个例子,有一些URL例如显示出攻击的意图,而其他URL则是一遍又一遍地重复相同的错误。基本上我很想知道哪些IP可能会被阻止,以及如果他们有错误的链接会联系哪些网站(或者我应该使用.htaccess将它们重定向到我的服务器上)。

2 个答案:

答案 0 :(得分:5)

如果您认为有必要这样做,只需扩展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;
    }
}

如果你继续得到像favicon.ico这样的东西,这很有可能是你的错,所以你可能想看一下。

只是为了澄清:

  • $_SERVER['HTTP_REFERER']将为您提供请求页面的网址,以便您查看请求的来源,无论是在您的网站上还是其他地方。
  • $_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);
    }

答案 1 :(得分:1)

我相信如果你想要这个,你必须通过创建custom 404 page并手动登录到日志文件来自己记录。您可以通过$_SERVER['REMOTE_ADDR']访问PHP中的IP地址。