Como fazer com que o Apache retorne uma página personalizada em um erro 400 com cabeçalhos de host malformados?

5

Acho que o que eu estava pedindo era um pouco difícil de entender, então, estou tentando simplificar ...

Eu preciso que meu servidor tenha uma página de erro 400 personalizada quando receber uma solicitação com um cabeçalho de host malformado.

O que eu quero, idealmente, é ErrorDocument 400 \somepage.php

Eu posso gerar 400 erros visitando uma página como http:\myserver\bla%bla , e isso irá para o meu script. Da mesma forma, posso alterar a seção \somepage.php para Test text e o Apache retornará esse texto.

Se, no entanto, o erro 400 for devido a um cabeçalho de host malformado, ele funcionará com o texto, mas não com a página da Web.

Alguém pode lançar alguma luz sobre isso e dar uma solução antes de soltar todo o meu cabelo ?! (já perdi um pouco sobre isso!).

    
por William Hilsum 08.03.2012 / 02:02

1 resposta

1

Depois de tentar muitas coisas, acontece que isso não é possível.

Eu abri um ticket no Bug Tracker do HTTPD - que foi fechado com Won't Fix .

Eles dizem que:

Marking as wontfix, when a request is malformed, the server isn't willing to do further processing to serve a custom errordocument out of the filesystem (your error page should have told you a recursive 400 was encountered)

Na minha opinião, isso não é muito bom - entendo que essa é a ação padrão, mas, por que não permitir que um usuário use uma página diferente, se desejar.

Francamente, deve funcionar desta forma, mas, se alguém apresentar uma resposta que envolva qualquer outra técnica (proxy, reescrita / similar), ficarei feliz em examiná-la e possivelmente dar a resposta.

editar

No final, descobri que é possível fazer isso com o Nginx e uma diretiva personalizada para redirecionar 400 páginas. Eu não entendo porque o Apache Devs não reconhece isso, mas o Nginx fez tudo certo.

    
por 08.03.2012 / 18:50