Вот такой у меня код:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# всё что не касается файлов и не имеет точки в названии, добавлять в конце слеш
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)\.(.*){1,5}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
# делает редирект для *.php)
RewriteCond %{REQUEST_URI} ^(.*)\.php$
RewriteRule ^(.*)\.php$ $1\/ [L,R=301]
# убираем индексы
RewriteCond %{REQUEST_URI} ^(.*)index.php(.*)$
RewriteRule ^(.*)index.php(.*)$ $1$2 [L,R=301]
# site.ru/*/ открывает как site.ru/*.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)(\/)$ %{REQUEST_FILENAME}.php/ [L]
</IfModule>
Но почему то всегда открывается главная, а не та запрашиваемая страница.