No se si ese andaba borracho o que ... vamos de nuevo, este código de donde lo has sacado? es de algún CMS o lo has colocado tu directamente en una aplicación personalizada?
Cita: RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
las lineas RewriteCond son claras, si el archivo o folder no existe envíalo al index.php por lo tanto tu error 404 no ocurre ya que index.php si existe (eso quiero pensar).
ese es el motivo por lo que ErrorDocument 404 /404.shtml no te funciona o parece no funcionar, ya que se ve sobrescrito por la dirección que usas.
Sin saber como funciona tu index.php no te sabría decir que hagas, pero tendrás que implementar una condicional en PHP para hacer la dirección o mostrar el mensaje personalizado para el error 404