Благодаря CBroe (или @CBroe) я придумал следующее:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\ HTTP/
RewriteRule ^(.*)index$ https://www.example.com/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ https://www.example.com/$1 [L,R=301]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.+)\.php\ HTTP/
RewriteRule ^(.+)\.php$ https://www.example.com/$1 [L,R=301]
RewriteRule ^([0-9a-zA-Z-_]+)$ /$1.php [L]
Исходный код разрешал только имена файлов с строчными буквами в них, в противном случае будет выдано сообщение «Ошибка 404 - Страница Не обнаружена". В приведенном выше коде последняя строка разрешает файлы со всеми буквами a – z (верхний и нижний регистры), а также дефисами и подчеркиваниями в именах.
Я хотел бы разрешить использование специальных символов, но многие из них должны быть сбежал, и я не знаю, какие из них и как это сделать (вероятно, просто \). На данный момент этого достаточно!