RewriteEngine On

# Remove .php extension from URLs
RewriteCond %{THE_REQUEST} \s/([^/?]+)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]

# Internally rewrite clean URLs to .php files
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^/]+)$ $1.php [L]