Sim, como você sugere, você precisa de uma condição adicional para testar se não é um diretório. Por exemplo, em .htaccess :
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9-]+)/?$ $1.html [L]
O !-d verifica se REQUEST_FILENAME não mapeia para um diretório. A variável REQUEST_FILENAME (em um diretório ou .htaccess context) contém o caminho absoluto do sistema de arquivos do arquivo / diretório para o qual a solicitação é mapeada.
Eu não acho que você precise verificar arquivos , já que um arquivo não deve corresponder ao padrão RewriteRule ^([A-Za-z0-9-]+)/?$ - a menos que você tenha arquivos sem extensões de arquivo?
Nos documentos do Apache , você vincula:
RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-d
O formato desta diretiva não parece correto para mim, considerando que o exemplo mostra que está sendo usado em um contexto diretório . (Esse formato pode ser necessário em um contexto servidor ou virtualhost , quando REQUEST_FILENAME é igual a REQUEST_URI - o caminho da URL da solicitação. essa variável então começa com uma barra , então o que está acima ainda está incorreto ?!)