Não está claro em sua pergunta se os arquivos PHP corretos estão sendo atingidos. Supondo que a sintaxe do seu .htaccess
esteja correta:
Seu RewriteRule
está indicando seu index.php
como o receptor de todos os arquivos e diretórios que não existem, com o caminho (acredito) sendo enviado para $_GET['a']
... cabe ao seu index.php
para detectar e lidar com isso apropriadamente.
ErrorDocument
é um mecanismo separado e, mais uma vez, se o 404.php
está sendo atingido, cabe a ele, por exemplo, header('HTTP/1.1 404 File Not Found')
e, em seguida, HTML de saída que indica uma página não encontrada.