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

Apache: разница между перенаправлением 404 и ErrorDocument 404

Я хотел бы выполнить перенаправление 404 с помощью Apache и нашел несколько решений:

  1. Метод .htaccess. Но я не хочу добавлять .htaccess, если он не нужен.

  2. метод виртуального хоста:

<VirtualHost *:80>
    ServerAlias *.example.com
    Redirect 404 /index.html
    ErrorDocument 404 /index.html
</VirtualHost>

Хотелось бы знать, в чем разница Redirect 404 и ErrorDocument 404?

Вы тестировали с Redirect директива?

Redirect 404 /index.html означает, что ответ 404 вернется, когда клиент запросит /index.html (даже если бы он мог существовать).

ErrorDocument 404 /index.html означает, что когда клиент обращается к несуществующему URL-адресу, Apache перенаправляет на страницу index.html.

Вы должны использовать ErrorDocument в таком случае.

Эти два обычно не связаны. Когда я просто попытался настроить перенаправление со статусом 404, я получил сообщение об ошибке Redirect URL not valid for this status при попытке запустить apache.

А Перенаправить отправляет клиента на новый адрес и предоставляет клиенту статус. Возвращаемый статус обычно 30x ценности.

В ErrorDocument Директива настраивает apache для возврата определенной страницы (а не страницы по умолчанию) при возникновении ошибки типа nnn. В вашем примере вы говорите return /index.html, когда возникает ошибка 404 (Not Found).

Чего вы пытаетесь достичь?

Это 3 разные вещи:

  1. куда вы настраиваете свои директивы:

    • в конфигурации Apache (например, файл vhost, обычно в / etc / apache2 / sites-available)
    • или в .htaccess где-нибудь в корневом веб-каталоге.

    Большинство директив можно поместить в любой файл. Директивы в .htaccess всегда применяются к текущему каталогу. Вы можете поместить их в корневой каталог или в подкаталог. Изменения в конфигурации Apache требуют перезагрузки веб-сервера (что хорошо, потому что он также выполняет некоторые проверки). Обычно рекомендуется вообще не использовать .htaccess (если в этом нет необходимости) из соображений производительности.

  2. В контексте, в котором вы определяете директиву, если в <VirtualHost *:80> он находится в контексте виртуального хоста (то есть применяется для этого виртуального хоста). Вы также можете использовать контекст каталога, то есть он применяется только к определенному каталогу. Это довольно хорошо объясняется в Apache 2.4. «Разделы конфигурации» документы .htaccess применяется к определенным каталогам (или ко всем, если вы поместите его на верхний уровень).

  3. Как вы настраиваете, то есть какие директивы. ErrorDocument и Redirect делают разные вещи:

    • ErrorDocument определяет, что должно отображаться в случае ошибки, используйте 404, если страница не найдена. Указанная вами директива означает, что index.html будет использоваться как страница с ошибкой. Обычно вы этого не хотите. Обычно вы хотите, чтобы отображалась конкретная страница с ошибкой, например ErrorDocument 404 error.html. Это рекомендуемый способ сделать это: он вернет код состояния HTTP 404 (что хорошо, потому что поисковые системы удаляют страницу из индекса) и отобразит error.html в браузере.
    • то Перенаправить Заявление, которое вы разместили выше, даст вам код состояния 404 HTTP, но не будет отображать указанную вами страницу, поэтому используйте ErrorDocument.

Если вы настроите ErrorDocument директиву правильно, все, что вам нужно сделать, это убедиться, что файл на самом деле отсутствует. Если вы пытаетесь сопоставить шаблон имени файла, вам необходимо сопоставить шаблон и переписать запрос в несуществующий ответ. И обязательно выключите просмотр каталогов:

<VirtualHost *:80>
 Options -Indexes
 ErrorDocument 404 /not-found.htm
 AliasMatch /index\.* /something/not/here
</VirtualHost>