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