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

Директива Apache ErrorDocument не работает

Я не могу заставить пользовательский документ об ошибке работать с 400 неверным запросом. Это сервер CentOS LAMP.

ErrorDocument 400 /badrdoc.html

Я пробовал использовать это в:

  1. Apache http.conf
  2. Apache httpd-vhosts.conf (в каждом виртуальном хосте)
  3. .htaccess в корневом каталоге htdocs сайта

Ни один из них не работает. Apache по умолчанию обслуживает страницу 400 неверных запросов.

Может ли кто-нибудь пролить свет на это?

Изменить: забыл упомянуть, я перезапустил Apache после изменений.

У меня были некоторые проблемы с тем, чтобы заставить работать пользовательский документ об ошибке 400. Я добавил это на верхний уровень моего Apache conf:

ErrorDocument 404 /404.html
ErrorDocument 400 /400.html

И создал два документа об ошибках в DocumentRoot. Сначала я протестировал 404 с:

echo -en "GET /foo HTTP/1.0\n\n" | nc 127.0.0.1 80

Это вернуло мой обычай 404.

Затем 400 (обратите внимание, что начальная косая черта отсутствует):

echo -en "GET foo HTTP/1.0\n\n" | nc 127.0.0.1 80

Ответом был Apache 400 по умолчанию.

Мне удалось вернуть свой собственный 400, поговорив HTTP с виртуальным хостом HTTPS:

echo -en "GET / HTTP/1.0\n\n" | nc 127.0.0.1 443

Вы все равно получите тот же кастомный 400 обратно, даже если сделаете неверный запрос:

echo -en "GET foo HTTP/1.0\n\n" | nc 127.0.0.1 443

К сожалению для вашего тестирования, разговор SSL с vhost, отличным от ssl, не приводит ни к какому типу 400. Так и не придумал как получить кастом ErrorDocuemnt 400 для отправки обратно на порт 80.

P.S. Я помню, как где-то читал, что ErrorDocument 400 не будет работать внутри .htaccess файл, так как может быть невозможно даже определить правильный DocumentRoot если запрос неверен. То же самое, вероятно, относится к виртуальным хостам на основе имен.