
В моем .htaccess
я имею
ErrorDocument 404 http://foo.com/404.html
Это работает в том смысле, что я восстанавливаюсь после любой ошибки «файл не найден» и вместо нее показываю страницу 404, но работает это так: ошибочный URI перенаправляется на мою 404.html
страницу с помощью 301.
Это плохо, поскольку поисковые системы и сканеры в конечном итоге увидят не код 404, а код 301 и не будут удалять удаленные страницы из своих индексов.
Могу ли я заставить Apache выдавать содержимое этой страницы 404 при ошибках «файл не найден», но при этом возвращать код 404 вместо 301?
решение1
Вам следует попробовать использовать абсолютный или относительный путь, а не URL.
Мой apache2.conf:
ErrorDocument 403 /error/403.html
ErrorDocument 404 /error/404.html
ErrorDocument 500 /error/500.html
решение2
Не указывайте внешний URL
Синтаксис такой:
ErrorDocument <3-digit-code> <action>
где может быть действие,
- Текст для отображения. Заключите текст в кавычки (").
- Внешний URL-адрес для перенаправления.
- Локальный URL-адрес для перенаправления.
Указание внешнего URL-адреса вызовет фактическое перенаправление, тогда как использование локального URL-адреса является внутренним.
Таким образом, чтобы отобразить содержимое файла, просто укажите на него, например:
ErrorDocument 404 /404.html
Используйте правильный код статуса для задания
Это плохо, потому что поисковые системы и сканеры в конечном итоге не увидят код 404, а только код 301 ине будет удалять удаленные страницы из индексов.
Если страницаиспользовалсуществовать и теперь не существует, правильный код ответа -410 Ушел. 410 — это код, означающий «эй, этого не существует», тогда как 404 будет воспринято только после многократных попыток доступа к теперь уже несуществующей странице.
решение3
Комментарий к ответам Maxence и AD7six (у меня недостаточно репутации на serverfaul, а репутация Stack Exchange, по-видимому, не считается):
Я только что решил проблему таким образом, но затем включенные изображения и стили отсутствовали, поскольку URL-адрес по-прежнему оставался тем URL-адресом, который пользователь пытался вызвать.
Решение — добавить базовый тег в заголовок документа 404, например:
ErrorDocument 404
или использовать абсолютные URL-адреса с указанием или без указания имени протокола/домена.