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.