Código Apache:
Ver originalOptions +FollowSymLinks
RewriteEngine On
# Remover trailing slashes.
# ejemplo miweb.com/algo/ redirije a miweb.com/algo
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=permanent,QSA]
# Redirige a HTML si existe.
# ejemplo miweb.com/algo muestra contenido de miweb.com/algo.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]
# Redirije a PHP si existe.
# ejemplo miweb.com/algo miestra contenido de miweb.com/algo.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L,QSA]
Pero precaución con esta regla, si tenes dos archivos de mismo nombre, ejemplo:
index.html
index.php
Va a cumplir la primera regla que coincida, asi que
index
ó
index/
te va a llevar a index.html
así que , o tenés cuidado con los nombres, o lo aplicás solo a una sola extensión dejando el 2º ó 3º bloque según lo necesites, el primero lo dejás siempre porque afecta a ambos y es para remover la
/
De la misma manera si por casualidad tenes una carpeta llamada index, te va a llevar a esta y no a ninguno de los archivos (sean index.html ó index.php, da lo mismo)
Saludos