| ||
Обработка ошибок веб-сервера ApacheПредставленный здесь скрипт был написан мной и реально работает на http://www.fondrostov.ru Зачем нужен этот скрипт1. Вы хотите знать, когда и кто вызвал на Вашем сайте ошибки.2. Вы хотите сэкономить время и нервы на тестировании сайта, и оставить этот неблагодарный труд самим пользователям. Вам останется лишь заглянуть в лог-файл и исправить указанные ошибки. 3. Вы хотите, чтобы вместо стандартного окошка с сообщением об ошибке появлялось ваше собственное, (можно даже с Вашим портретом :-))) 4. Любые другие причины. Как именно заставить Apache вызывать наш скриптДля начала надо создать файл .htaccess с примерно таким содержимым:
и поместить его в корневую директорию ($DOCUMENT_ROOT) вашего хоста. Таким образом мы
говорим веб-серверу, что при возникновении ошибки с указанным номером исполняется соответствующий скрипт.
Далее пишем сам обработчик ошибок. Я приведу только один, хотя всего их 4. Они различаются только текстом сообщения об ошибке и именем лог-файла.
/errors/401.php - путь от корня сайта до скрипта обработки ошибок. Сам скрипт404.php
Не забудьте явно указать кодировку, иначе клиент скорее всего получит бурду вместо русского текста.
</HEAD>
<BODY>
<? $er_time=date("H:i:s d M Y");
Определяем формат вывода даты и времени.
$U=$HTTP_USER_AGENT;
Собираем информацию о том, откуда пришел клиент, какой у него браузер, IP и обращение к какой странице вызвало ошибку.
$H=$HTTP_REFERER;
$R=$REMOTE_ADDR;
$W=$REQUEST_URI;
if ($W=="") Если строка пустая, то вместо нее будет отображаться ---------, так дагляднее.
$W="---------";
if ($H=="")
$H="---------";
$logname="logs/fr_error404.log"; Определяем имя и расположение лог-файла
$fd2=fopen($logname,'a+'); Открываем лог-файл по дискриптору $fd2
fwrite($fd2,"<tr><td>$er_time </td><td>$R </td><td>$H </td><td>$W </td><td>$U </td></tr>\n");
Записываем строку в виде ячеек таблицы и полученными значениями переменных
fclose($fd2);
не забываем закрыть лог
?>
Далее идет текст, который отображается при показе страницы
<h3><center>
<? echo "$er_time"; печатаем время
?>
Произошла ошибка.<br>
Запрашиваемый Вами документ
"<? echo "$W";
?>" на сервере не найден. Англоязычный текст /признак хорошего тона или жест робкой надежды?/
Requested document "<? echo $W ;
?>"
not found. Error code: 404. <br>
Server administrator will be informed and will take measures to resolve this error.
<br><br>
<? include "sign.inc" ?> Подключаем файл с подписью и координатами администратора :)
</center></h3>
</body></html>
Вот так!Таких файлов клепаем 4 штуки. Теперь неплохо бы систематизировать информацию, т.е. пора показать лог-файлы. Делаем это следующим образом: в навигации сайта добавляем пункт типа "Вход для Администратора" и ссылаемся на файл, например admin.php. Анализируй этоadmin.php Подключаем лог-файл
</table><br><br>
Ошибка 403: Доступ запрещен Информация для поклонников :-)))
</h3>
</body></html>
Я думаю код файла, который мы с вами назвали admin.php в особых комментариях не нуждается. Но это еще не все. В принципе, остальным посетителям
сайта нет необходимости видеть страницу со списком ошибок. Средствами того же .htaccess запретим просмотр папки с лог-файлами
положив его в папку с логами, и запаролим доступ к admin.php. Файл .htpasswd создается утилитой, которая идет в комплекте с Apache. Текст, который будет отображаться на окошке авторизации
AuthType Basic
AuthUserFile /var/www/html/.htpasswd Абсолютный путь до файла .htpasswd
require valid-user
а этот файл положим в каталог с admin.php. да, и незабудте поставить права на запись в папку с логами rw-rw-rw, а *.php rwx-x-xТеперь скрипт готов к труду и обороне. Побочные эффекты:Если не создавать в корне сайта файл robots.txt, а я не вижу в этом объективной необходимости для большинства Интернет-проектов, то каждая индексация страниц вашего сайта будет обозначаться в логе как ошибка 404 документа robots.txt. А в колонке "Браузер клиента" отобразится название поисковика. Весьма полезная фенька.Я прекрасно понимаю, что код неоптимизирован, можно было сделать гораздо проще, можно добавить еще всяких фичей и т.д. Пожалуйста - действуйте, изменяйте, добавляйте. Готов к аргументированной критике. Все будет приятнее, что не зря провел столько часов перед монитором. С уважением Mikle Heavy AfghanServer 8/04/2003 |
|
|