Редирект на страницу 404
Недавно я написал заметку о забавной иллюстрации для оформления страницы 404. Теперь поговорим о технической стороне.
Нам нужно чтобы при переходе по несуществующему адресу браузер открывал нашу заранее подготовленную страницу с информацией об ошибке. Сделать это можно настроив директиву ErrorDocument в файле htaccess.
Некоторые хостинг-провайдеры рекомендуют следующую конструкцию:
ErrorDocument 404 https://site.ru/404.html
Здесь site.ru — домен нашего предполагаемого сайта, а 404.html — страница для ошибки 404.
Я отмечу здесь одну важную деталь. Это будет работать как полноценный редирект. То есть для несуществующей страницы сайт ответит статусом 301 Moved Permanently. Соответственно, поисковые роботы будут считать, что страница на самом деле существует, просто перемещена по новому адресу. Понятное дело, такой ответ нам не нужен.
Чтобы отвадить роботов индексировать страницу 404 советуют настроить файл robots.txt. Нужно внести в него следующую строку:
Disallow: /404.html
Это рабочий вариант. Однако, как по мне, избыточно сложный. Открываем документацию к Апачу. Там сказано:
The syntax is,
ErrorDocument <3-digit-code> <action>
where the action can be,
- Text to be displayed. Wrap the text with quotes (").
- An external URL to redirect to.
- A local URL to redirect to.
То есть для ответа можно использовать:
- Просто текст в кавычках, который отобразится пользователю.
- Перенаправление на внешний URL
- Перенаправление на локальный URL
Здесь внешним URL считается всё, что начинается с http или https, даже если находится на том же домене. И вот указание такого внешнего URL приведёт к фактическому перенаправлению со статусом 301. Это и происходит если использовать директиву с http.
А использование локального URL, начинающегося со слеша, не приводит как к таковому перенаправлению. В браузере отобразится указанная страница, а вот URL в адресной строке не поменяется. И статус ответа останется 404.
Вот так выглядит директива с локальным перенаправлением:
ErrorDocument 404 /404.html
Это гораздо удобнее. В этом варианте мы получаем нужный ответ сервера. И не нужно настраивать robots.txt для поисковых роботов.