Bueno, primero habría que establecer algo, que me genera una duda.
No es lo mismo quere ocultar las extensiones que querer evitar tener que pasar parámetros en una url (ejemplo buscar.php?valor=1)
Y por tus ejemplos ya no estoy seguro de que si querés hacer una u otra cosa, a lo primero mucho sentido no le encontré nunca, a lo segundo, que se lo conoce como urls amigables, si, es muy efectivo para mejorar el posicionamiento en los buscadores.
cual de las dos querés hacer?, o las dos?
mirá estos ejemplos
http://mr4.emprear.com/inx.html
con el siguiente .htaccess
Código:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# Remover trailing slashes.
# ejemplo miweb.com/algo/ redirije a miweb.com/algo
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=permanent,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^somos/(.*)$ /somos.php?id=$1 [L]
RewriteRule ^categoria/(.*)$ /somos.php?id=$1 [L]
# Redirije a PHP si existe.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L,QSA]
Fijate que somos/(.*) y categoría/(.*) , ambos llevan a somos.php y pasan el parámetro id
Saludos