Я хотел бы выполнить перенаправление 404 с помощью Apache и нашел несколько решений:
Метод .htaccess. Но я не хочу добавлять .htaccess, если он не нужен.
метод виртуального хоста:
<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 разные вещи:
куда вы настраиваете свои директивы:
Большинство директив можно поместить в любой файл. Директивы в .htaccess всегда применяются к текущему каталогу. Вы можете поместить их в корневой каталог или в подкаталог. Изменения в конфигурации Apache требуют перезагрузки веб-сервера (что хорошо, потому что он также выполняет некоторые проверки). Обычно рекомендуется вообще не использовать .htaccess (если в этом нет необходимости) из соображений производительности.
В контексте, в котором вы определяете директиву, если в <VirtualHost *:80>
он находится в контексте виртуального хоста (то есть применяется для этого виртуального хоста). Вы также можете использовать контекст каталога, то есть он применяется только к определенному каталогу. Это довольно хорошо объясняется в Apache 2.4. «Разделы конфигурации» документы .htaccess применяется к определенным каталогам (или ко всем, если вы поместите его на верхний уровень).
Как вы настраиваете, то есть какие директивы. ErrorDocument и Redirect делают разные вещи:
ErrorDocument 404 error.html
. Это рекомендуемый способ сделать это: он вернет код состояния HTTP 404 (что хорошо, потому что поисковые системы удаляют страницу из индекса) и отобразит error.html в браузере.Если вы настроите ErrorDocument
директиву правильно, все, что вам нужно сделать, это убедиться, что файл на самом деле отсутствует. Если вы пытаетесь сопоставить шаблон имени файла, вам необходимо сопоставить шаблон и переписать запрос в несуществующий ответ. И обязательно выключите просмотр каталогов:
<VirtualHost *:80>
Options -Indexes
ErrorDocument 404 /not-found.htm
AliasMatch /index\.* /something/not/here
</VirtualHost>