Это сводило меня с ума MAD! но я нашел ответ для тех, кто запутался, как я.
Посмотрите на строку 4:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^404.html$ 404.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php
Взято из: easymodrewrite :
Флаг [L] может привести к неожиданным результатам, если вы не знаете, как работает модуль.Обратите внимание, что следующее применимо, только когда mod_rewrite используется в файле .htaccess.Флаг [L] ведет себя точно так, как ожидается, когда используется в httpd.conf.
Флаг L скажет Apache прекратить обработку правил перезаписи для этого запроса.Теперь часто нереализованным является то, что теперь он делает новый запрос на новое, переписанное имя файла и снова начинает обработку правил перезаписи.
По сути, вы должны сказать второму правилу, что он не соответствует существующим файлам(404.php - настоящий файл, а не динамический).
Надеюсь, это кому-нибудь поможет.