La réécriture d’URL renvoie une erreur de serveur interne de 500

J’essaie de convertir ceci:

site/read.php?id=6

à

site/read/6

J’ai essayé quelques solutions trouvées sur SO, la dernière étant (pour sortir: site/read/id/6 ): RewriteRule ^(.*?\.php)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,N,QSA] RewriteRule ^(.*?\.php)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,N,QSA]

Lorsque j’essaie le deuxième lien, il se bloque et apache se bloque (LOL).

Vous ne savez pas si cela a un problème avec le rest du fichier .htaccess, voici le code complet:

 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php RewriteRule ^(.*?\.php)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,N,QSA] 

Je pourrais réaliser (avec les lignes 1 à 4) qu’aucune extension PHP n’apparaisse, la barre d’adresse lit donc site/read?id=6

Pouvez-vous m’indiquer où j’ai mal tourné?

Vous pouvez mettre ce code dans votre htaccess (qui doit être dans le dossier racine)

 Options -MultiViews RewriteEngine On RewriteCond %{THE_REQUEST} \s/read\.php\?id=([0-9]+)\s [NC] RewriteRule . /read/%1? [R=301,L] RewriteRule ^read/([0-9]+)$ /read.php?id=$1 [L] 

Je voudrais faire cela en PHP, il est très difficile de déboguer ce que Apache obtient, il se peut qu’il passe en boucle indéfinie, avez-vous trouvé quelque chose dans les fichiers journaux Apache? Mais épargnez-vous un problème et faites-le en PHP, si vous utilisez un Framework, il est facile d’inclure un PHP qui vérifie cela et redirige vers une nouvelle page s’il détecte un .php dans une URL.