Remova extensões .php com .htaccess sem quebrar o DirectoryIndex

Eu tenho o seguinte rewrite no meu arquivo. Htaccess que remove a extensão .php de arquivos, convertendo por exemplo, so.question.php para so.com/question .

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] 

No entanto, isso também quebra o comportamento DirectoryIndex padrão, no qual apenas digitar o diretório será redirecionado para o arquivo de índice na pasta, por exemplo, so.com/answer exibe so.com/answer/index.php

Simplesmente combinar o código acima com DirectoryIndex index.php não atinge os dois resultados.

Alguém pode me ajudar a combinar essas duas funções, ou rewrite o código para excluir arquivos index.php, o que alcançaria o mesmo resultado?

Eu estou pensando que você só precisa verificar se o arquivo existe antes de fazer a reescrita, dessa forma você vai deixar intactos os comportamentos 404 e directoryindex:

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php [NC,L] 

(não testado)

 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [L, QSA] 

verificar arquivos e pastas e também adicionar RewriteBase /