Как отправить правильный ответ HTTP на пользовательский документ об ошибке?

Мой сайт настроен через .htaccess сделать это:

ErrorDocument 403 http://www.mydomain.com/error.php?e=403
ErrorDocument 401 http://www.mydomain.com/error.php?e=401
ErrorDocument 400 http://www.mydomain.com/error.php?e=400
ErrorDocument 500 http://www.mydomain.com/error.php?e=500

error.php регистрирует ошибку и показывает дружественную пользователю / пользователю страницу ошибки.

Кроме того, я добавил этот кусок кода:

if($_GET['e'] == '404' || $_GET['e'] == '403' || $_GET['e'] == '500' )
{   $error_no = $_GET['e']; } else { $error_no = '200'; }
header(' ', true, $error_code);

Поэтому, когда я посещаю mydomain.com/pagedoesnotexist Я вижу страницу ошибки (но в адресной строке все еще отображается несуществующий URL), я получаю отчет о том, что страница 404 была триггером, но я взглянул на файл журнала моего сервера, и вот что он говорит: MY.IP.000.00 - - [date and time] "GET /pagedoesnotexistHTTP/1.1" 200 2450 "-" "USERAGENTINFO"

Нигде в журнале моего сервера я не вижу ничего о 404... только 200... Почему это так? Как я могу заставить его отправить обратно код 404? Прямо сейчас я предполагаю, что боты и тому подобное всегда получают 200, что означает ОК при посещении несуществующих сайтов... Или я что-то упустил?

* и не по теме: что означает 2450? O_o*

1 ответ

Решение

Однако обратите внимание, что вы устанавливаете ErrorDocument неправильно, что вызывает внешнее перенаправление и возвращает вас 200 вместо 404, 403 и т. д. Установите свой ErrorDocument без доменного имени:

ErrorDocument 403 /error.php?e=403
ErrorDocument 401 /error.php?e=401
ErrorDocument 400 /error.php?e=400
ErrorDocument 500 /error.php?e=500

Это сохранит исходный не найденный URL в вашем браузере и вернет правильный код статуса HTTP.

О вашем коде:

Вы устанавливаете переменную $error_no и используя $error_code в header() функция. Вы должны использовать:

if($_GET['e'] == '404' || $_GET['e'] == '403' || $_GET['e'] == '500' )
{   $error_no = $_GET['e']; } else { $error_no = '200'; }
header(' ', true, $error_no);
Другие вопросы по тегам