Как отправить правильный ответ 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);