Как определить, какая страница вызвала внутреннюю ошибку сервера? - PullRequest
2 голосов
/ 11 июля 2010

Итак, в моем файле .htaccess есть строки ErrorDocument:

ErrorDocument 500 http://www.example.com/500

Поскольку мой сервер запускает несколько веб-сайтов из одних и тех же основных файлов, я просто хочу перенаправить все внутренние ошибки сервера на одну страницу обработки. Однако моя проблема в том, что он не отправляет информацию о странице, которая вызывает ошибку, он перенаправляет страницу. Я попытался изменить его на ErrorDocument 500 index.php?500, но это просто вызывает вторую внутреннюю ошибку сервера при попытке найти файл. Любые идеи о том, как я могу успешно перенаправить его на свою пользовательскую страницу с ошибкой 500 и по-прежнему получать информацию о странице, которая изначально вызвала ошибку?

Ответы [ 4 ]

3 голосов
/ 19 июля 2010

В своем заявлении ErrorDocument вы указываете URL-адрес удаленной страницы. В результате Apache отправляет пользователю заголовок Location, и пользователь отправляется в путь веселым путем.

Вместо этого измените URL-адрес на абсолютный путь к локальному сценарию, который будет обрабатывать ошибку:

ErrorDocument 500 /500.php

Сценарий должен быть запущен с набором переменных среды, начинающихся с REDIRECT_, которые должны содержать различные пути и строки запроса, связанные с ошибкой.

Нет способа отправить пользователя куда-либо, а также перехватить информацию в самом ErrorDocument. С другой стороны, ваш сценарий может собирать информацию и затем перенаправлять пользователя, если по какой-то причине вы все еще хотите обработать его.

1 голос
/ 19 июля 2010

Вы всегда можете заглянуть в поле referrer http-запроса, чтобы определить, по какому URL-адресу звонил ранее

0 голосов
/ 20 июля 2010

Ваш сервер apache регистрирует каждую ошибку (хотя она настраивается).Вы можете открыть этот файл и управлять им, используя FileStream на своем веб-сайте PHP.См. http://httpd.apache.org/docs/2.2/logs.html, чтобы узнать больше о файле журнала Apache.Вы можете получить учебник по .htaccess по адресу http://www.freewebmasterhelp.com/tutorials/htaccess/.

. Чтобы выполнить свою собственную обработку, создайте файл PHP, такой как error.php, который будет обрабатывать ваши ошибки.Вы можете перенаправить его с помощью файла .htaccess.После этого, если вы хотите перейти на страницу, вы можете сделать это, используя метод header().

0 голосов
/ 19 июля 2010

Проверьте журнал доступа вашего веб-сервера. Там вы сможете увидеть, какой запрос вызывает код ответа 500.

В Apache (с использованием формата журнала по умолчанию) успешный запрос (200 OK) может выглядеть следующим образом:

127.0.0.1 - - [19/Jul/2010:18:25:54 +0200] "GET / HTTP/1.1" 200 663 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8pre) Gecko/20100718 Ubuntu/10.04 (lucid) Namoroka/3.6.8pre"

Запрос, который приводит к 500, может выглядеть так:

127.0.0.1 - - [19/Jul/2010:18:24:37 +0200] "GET / HTTP/1.1" 500 631 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8pre) Gecko/20100718 Ubuntu/10.04 (lucid) Namoroka/3.6.8pre"

Код ответа находится в шестом столбце.

Вы также можете проверить журнал ошибок PHP, который будет содержать все ошибки PHP, если вы включили ведение журнала ошибок (вам следует).

...