Назад | Перейти на главную страницу

Могу ли я заставить Apache ErrorDocument возвращать 404 вместо 301?

В моем .htaccess у меня есть

ErrorDocument 404 http://foo.com/404.html

Это работает в том смысле, что я восстанавливаюсь после любой ошибки, не найденной файла, и вместо этого показываю страницу 404, но способ, которым он работает, заключается в перенаправлении ошибочного URI с использованием 301 на мой 404.html страница.

Это плохо, потому что поисковые системы и сканеры в конечном итоге увидят не код 404, а код 301, и не будут удалять удаленные страницы из своих индексов.

Могу ли я заставить Apache обслуживать содержимое этой страницы 404 при отсутствии ошибок в файле, но по-прежнему возвращать код 404 вместо 301?

Не указывайте на внешний URL

Документы Apache говорят:

Синтаксис:

ErrorDocument <3-digit-code> <action>

где действие может быть,

  • Текст для отображения. Заключите текст в кавычки (").
  • Внешний URL-адрес для перенаправления.
  • Локальный URL-адрес для перенаправления.

Указание на внешний URL-адрес вызовет фактическое перенаправление, тогда как использование локального URL-адреса является внутренним.

Итак, чтобы отобразить содержимое файла, просто укажите на него, например:

ErrorDocument 404 /404.html

Используйте правильный код статуса для работы

Это плохо, потому что поисковые системы и сканеры в конечном итоге увидят не код 404, а код 301 и не удаляет удаленные страницы из их индексов.

Если страница используемый чтобы существовать, а теперь нет, правильный код ответа 410 ушел. 410 - это код, чтобы сказать «эй, этого не существует», тогда как 404 будет восприниматься только как означающий, что после неоднократных попыток доступа к несуществующей странице.

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

Мой apache2.conf:

ErrorDocument 403 /error/403.html
ErrorDocument 404 /error/404.html
ErrorDocument 500 /error/500.html

Прокомментируйте ответы Maxence и AD7six (у меня недостаточно репутации в отношении serverfaul, и репутация обмена стеками явно не в счет):

Я просто решил проблему таким образом, но тогда отсутствовали включенные изображения и стили, так как URL-адрес по-прежнему является URL-адресом, который пытался вызвать пользователь.

Решение состоит в том, чтобы добавить базовый тег в заголовок документа 404, например

ErrorDocument 404

или использовать абсолютные URL-адреса с протоколом / доменным именем или без него.