Я думаю, что то, о чем я просил, было немного сложно понять, поэтому я пытаюсь сделать это проще ...
Мне нужно, чтобы на моем сервере была настраиваемая страница с ошибкой 400, когда он получает запрос с искаженным заголовком хоста.
В идеале я хочу ErrorDocument 400 \somepage.php
Я могу сгенерировать 400 ошибок, посетив такую страницу, как http:\\myserver\bla%bla
, и это отлично подойдет для моего сценария. Точно так же я могу изменить \somepage.php
раздел к Test text
и Apache вернет этот текст.
Однако, если ошибка 400 вызвана неверным форматом заголовка хоста, он будет работать с текстом, но не с веб-страницей.
Может ли кто-нибудь пролить свет на это и дать рабочий раствор, прежде чем я потеряю все волосы ?! (уже немало потерял из-за этого!).
После многих попыток оказалось, что это невозможно.
Я открыл заявку на отслеживание ошибок HTTPD - который был закрыт с помощью Won't Fix.
Они говорят, что:
Пометка как wontfix, когда запрос имеет неправильный формат, сервер не желает выполнять дальнейшую обработку для обслуживания настраиваемого документа с ошибкой из файловой системы (ваша страница с ошибкой должна была сообщить вам, что обнаружен рекурсивный 400)
На мой взгляд, это не очень хорошо - я понимаю, что это действие по умолчанию, но почему бы не позволить пользователю использовать другую страницу, если они того пожелают.
Откровенно говоря, это должно работать именно так, но если кто-нибудь придет к ответу, который включает в себя какой-либо другой метод (прокси, переписывание / подобное), я буду счастлив взглянуть на него и, возможно, поставить ему оценку.
В конце концов, я обнаружил, что это можно сделать с помощью Nginx и специальной директивы для перенаправления 400 страниц. Я не понимаю, почему разработчики Apache не признают этого, но Nginx справился с этим нормально.