O motivo desse erro foi a configuração padrão:
Alias /error/ "/var/www/error/"
A remoção desta linha fez com que funcionasse.
Meu apache VirtualHost
contém uma diretiva ErrorDocument
:
<VirtualHost *:80>
ServerName test
DocumentRoot /var/www/html/test/
ErrorDocument 404 /error/404.txt
</VirtualHost>
O arquivo /var/www/html/test/error/404.txt
existe.
Ao tentar acessar um arquivo não existente, recebo uma mensagem de erro-em-um-erro do apache:
The requested URL /foo was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
O log de erros contém:
[error] File does not exist: /var/www/html/test/foo [error] File does not exist: /var/www/error/404.txt
Por que o apache torna o caminho do documento de erro relativo a /var/www
(diretório inicial do usuário do apache) em vez de relativo ao DocumentRoot
do host virtual, como descrito nos documentos ?
URLs can begin with a slash (/) for local web-paths (relative to the DocumentRoot), ...
Isso acontece com o Apache 2.2 no CentOS 6.7.
O motivo desse erro foi a configuração padrão:
Alias /error/ "/var/www/error/"
A remoção desta linha fez com que funcionasse.