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

В моем .htaccess я имею

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

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

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

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

3 ответа

Решение

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

Мой apache2.conf:

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

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

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

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

ErrorDocument <3-digit-code> <action>

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

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

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

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

ErrorDocument 404 /404.html

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

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

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

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

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

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

ErrorDocument 404

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

Другие вопросы по тегам