Можно ли заставить Apache ErrorDocument возвращать 404 вместо 301?

Можно ли заставить Apache ErrorDocument возвращать 404 вместо 301?

В моем .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

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

Синтаксис такой:

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-адреса с указанием или без указания имени протокола/домена.

Связанный контент