Могу ли я заставить 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
Синтаксис такой:
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 с или без протокола / доменного имени.