Как отловить с какой страницы идет переход на 404.php

Рейтинг: 0Ответов: 1Опубликовано: 17.04.2023

Господа, мое почтение. В анализирую логи своего сайта, вижу что пользователи время от времени попадают на страницу 404, задумал я значит узнать куда они тыкают и по каким еще причинам они редиректятся туда.

(mamp, apache, localhost)

В .htaccess прописал ErrorDocument 404 /404.php?url=%{HTTP_REFERER} с затаенной надеждой что все сработает (спойлер нужен?)

Далее на странице 404.php я во влажных фантазиях прописываю код, который обработает все чего я так хочу

// записываем в лог с какой страницы был переход
$log_file = 'logs/404.log';
$url = isset($_GET['url']) ? $_GET['url'] : 'unknown';
$timestamp = date('d.m.Y H:i:s');
$log_message = "[$timestamp] 404 : $url\n";
file_put_contents($log_file, $log_message, FILE_APPEND);

Тут как видно, все просто, генерим строку и помещаем в 404.log. И что я вижу?

[17.04.2023 08:17:20] 404 : 
[17.04.2023 08:17:29] 404 :
[17.04.2023 08:17:44] 404 :
[17.04.2023 08:17:50] 404 : 

После двоеточия пусто, сухо и не комфортно

  • Если умышленно допускать ошибку в url сайта и спровоцировать работу example.com/hello_wor44ld то в лог попадает пустая строка
  • Если находясь на этой странице обновить окно браузера - то в лог опять попадает пустая строка
  • Если находясь на этой странице сохраниться в VSCode (live server) то в лог попадает тот url, который я хочу

PS. И в заключение: Ранее в .htaccess было прописано ErrorDocument 404 /404.php и при переходе на битый url открывалась 404.php и в браузере отрисовывался контент этой страницы. Теперь же, контент отрисовывается со страницы 404, однако в адресной строке прописывается битый url

Как же мне записать в лог битый url?

Ответы

▲ 0
$log_message = "[$timestamp] 404 : $url\n";

Переписать на $log_message = "[$timestamp] 404 : {$url}\n"; Иначе у вас либо не существует $_GET['url'], либо первое :). "'unknown'" - в логе не видно