Eu tive alguns problemas para conseguir um documento de erro 400 personalizado para funcionar. Eu adicionei isso ao nível superior do meu Apache conf:
ErrorDocument 404 /404.html
ErrorDocument 400 /400.html
E criou os dois documentos de erro no DocumentRoot
. Primeiro, eu testei o 404 com:
echo -en "GET /foo HTTP/1.0\n\n" | nc 127.0.0.1 80
Isso retornou meu 404 personalizado.
Em seguida, o 400 (Observe que a barra inicial está faltando):
echo -en "GET foo HTTP/1.0\n\n" | nc 127.0.0.1 80
A resposta foi o padrão do Apache 400.
Consegui recuperar meu 400 personalizado falando HTTP para um vhost HTTPS:
echo -en "GET / HTTP/1.0\n\n" | nc 127.0.0.1 443
Você ainda recebe o mesmo 400 personalizado de volta, mesmo que você faça uma solicitação inválida:
echo -en "GET foo HTTP/1.0\n\n" | nc 127.0.0.1 443
Infelizmente para o seu teste, falar SSL com um vhost não-ssl não resulta em um 400 de qualquer tipo. Eu ainda não descobri como obter um ErrorDocuemnt 400
personalizado para ser enviado de volta na porta 80.
P.S. Lembro-me de ler em algum lugar que um ErrorDocument 400
não funcionará dentro de um arquivo .htaccess
, pois pode não ser possível determinar o DocumentRoot
correto se a solicitação estiver malformada. O mesmo provavelmente se aplica a virtualhosts baseados em nomes.