Ошибки Codeigniter 404 - Как определить, откуда они? - PullRequest
1 голос
/ 06 июля 2011

Например, в моих журналах много повторяющихся строк, например:

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

Могу ли я узнать, кто вызывает эти ошибочные URL? Фавикон - это просто пример, есть некоторые URL, которые, например, показывают намерение взломать, а другие - это та же самая ошибка, повторяемая снова и снова. По сути, я хотел бы знать, какие IP-адреса потенциально блокировать, а также с какими сайтами связываться, если у них плохие ссылки (или если мне просто нужно перенаправить их на мой сервер с помощью .htaccess).

Ответы [ 2 ]

5 голосов
/ 06 июля 2011

Если вы чувствуете необходимость сделать это, просто расширьте класс 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'] даст вам 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);
    }
1 голос
/ 06 июля 2011

Полагаю, что если вы хотите этого, вы должны зарегистрировать его самостоятельно, создав пользовательскую страницу 404 и вручную войдя в файл журнала.Вы можете получить доступ к IP-адресу в PHP через $_SERVER['REMOTE_ADDR'].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...