RewriteEngine On

# Skip real files and directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# Redirect visible *.php URLs to clean paths
RewriteCond %{THE_REQUEST} \s/+index\.php([\s?]|$) [NC]
RewriteRule ^index\.php$ / [R=301,L,QSA]

RewriteCond %{THE_REQUEST} \s/+(.+?)\.php([\s?]|$) [NC]
RewriteRule ^ %1 [R=301,L,QSA]

# Clean URL -> PHP file
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L,QSA]
