Eu acho que você provavelmente tem um conflito com o mod_dir (e o DiretcoryIndex ). Embora eu esteja surpreso, isso "funciona perfeitamente em .htaccess " (a menos que você tenha algo que impeça um loop)?
Se você reescrever para o diretório nulo, ou seja. /dir/ , em seguida, mod_dir acionará uma subrequista interna para /dir/index.php (ou qualquer que seja seu DirectoryIndex definido) e isso provavelmente acionará um loop infinito (apesar de END flag), pois /dir/index.php corresponde a !^/dir/$ .
Você deve reescrever diretamente no documento de índice e isso deve resolver o problema. Por exemplo:
RewriteEngine on
RewriteRule !^/?dir/$ /dir/index.php [END]
Você não precisa da diretiva RewriteCond que verifica em relação a REQUEST_URI , você pode fazer a mesma verificação no padrão RewriteRule - que é um pouco mais eficiente e economiza uma diretiva .