1. Вариант: Прямое сопоставление
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
# в таком случае
# https://localhost/index соответствует обращению к файлу index.php в корне локального сайта
# https://localhost/about соответствует обращению к файлу about.php в корне локального сайта
1.2 Вариант: Прямое сопоставление с добавлением косой черты в конце
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*?)/?$ $1.php
# в таком случае
# https://localhost/about соответствует обращению к файлу about.php в корне локального сайта
# https://localhost/about/ соответствует обращению к файлу about.php в корне локального сайта
2. Вариант: Через роутерный файл
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?alias=$1 [L,QSA]
# в этом случае
# https://localhost/index соответствует обращению к файлу index.php в корне локального сайта c GET переменной alias равной index
# https://localhost/about соответствует обращению к файлу index.php в корне локального сайта c GET переменной alias равной about
# https://localhost/about/me/ соответствует обращению к файлу index.php в корне локального сайта c GET переменной alias равной about/me/