.htaccess rewrite aide, supprimer .php de l’URL

Je ne suis pas confronté à un autre problème avec mon mod_rewrite, d’abord, l’heure est mon fichier .htaccess:

Options +FollowSymlinks RewriteEngine on RewriteRule ^news/([0-9]+)/?$ /news?id=$1 [L,QSA] RewriteRule ^contact/([0-9]+)/?$ /contact?do=$1 [L,QSA] RewriteRule ^account/([a-zA-Z]+)/?$ /account?action=$1 [L,QSA] RewriteRule ^admin/([a-zA-Z]+)/?$ /admin?action=$1 [L,QSA] RewriteRule ^login/([a-zA-Z]+)/?$ /login?action=$1 [L,QSA] RewriteRule ^register/([a-zA-Z]+)/?$ /register?action=$1 [L,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^\.]+)$ $1.php [NC,L] <- This line doesn't work RewriteRule ^([\w\d~%.:_\-]+)$ index.php?page=$1 [L,QSA] 

Toutes les lignes fonctionnent, à côté du RewriteRule ^ ([^.] +) $ $ 1.php [NC, L] et lorsque j’utilise cette ligne, toutes les autres règles sont interrompues.

Qu’est-ce que je fais mal?

Vous devez utiliser le drapeau L dans votre règle problématique.

Pour supprimer l’extension .php, il est préférable d’utiliser la règle suivante:

 Options +FollowSymlinks -MultiViews RewriteEngine on ## If the request is for a valid directory RewriteCond %{REQUEST_FILENAME} -d [OR] ## If the request is for a valid file RewriteCond %{REQUEST_FILENAME} -f [OR] ## If the request is for a valid link RewriteCond %{REQUEST_FILENAME} -l ## don't do anything RewriteRule ^ - [L] RewriteRule ^news/([0-9]+)/?$ /news?id=$1 [L,QSA] RewriteRule ^contact/([0-9]+)/?$ /contact?do=$1 [L,QSA] RewriteRule ^account/([a-zA-Z]+)/?$ /account?action=$1 [L,QSA] RewriteRule ^admin/([a-zA-Z]+)/?$ /admin?action=$1 [L,QSA] RewriteRule ^login/([a-zA-Z]+)/?$ /login?action=$1 [L,QSA] RewriteRule ^register/([a-zA-Z]+)/?$ /register?action=$1 [L,QSA] RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.+?)/?$ $1.php [L] RewriteRule ^(.+?)/?$ index.php?page=$1 [L,QSA] 

Essayez quelque chose comme

 #Preventing loop RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP RewriteRule (.*)\.php$ $1 [R=301] RewriteCond %{REQUEST_URI} !^.+\.php.*$ RewriteRule .* - [L] 

Mettez ceci après RewriteRule ^register/([a-zA-Z]+)/?$ /register?action=$1 [L,QSA]