[RESOLU] Règle de réécriture d'URL dans mon .htaccess

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

12 sept. 2015, 03:14

Bonjour,

Ça faisait un moment que je n'avais pas codé et, si HTML, CSS, PHP,... reviennent vite,
les REGEX pour les redirections Apache, en revanche, c'est pas comme le vélo : ça s'oublie. :cry:

Je souhaite réécrire mes URL sous cette forme :

presentation/edito-1.htm <==> index.php?p=11&n=1

Précisions :
- 'presentation' est un dossier virtuel, présent dans l'URL réécrite mais qui n'existe pas physiquement.
- le nombre final de l'URL réécrite est le paramètre 'n'

J'ai composé la rgèle de réécriture suivante :
RewriteRule ^(\S*)(\/?)edito-([0-9]+)\.htm$       /index.php?p=11&n=$1  [L]
Mais ça marche pas.
Aurais-je merdoyé quelque part ?

Merci !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

12 sept. 2015, 10:08

Effectivement, tu as merdoyé quelque part ;-)
Ta règle actuelle fait ça :
presentation/edito-1.htm <==> index.php?p=11&n=presentation/
Tu utilises des parenthèses capturantes pour récupérer des choses que tu n'utilises pas ensuite.
2 possibilités :
- soit tu dégages les parenthèses inutiles
- soit tu les transformes en parenthèses non-capturantes, c'est à dire en ajoutant "?:" après la parenthèse ouvrante, ce qui donne (?:

Voici un site bien pratique pour tester ses règles htaccess :
http://htaccess.madewithlove.be
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

12 sept. 2015, 10:15

Et pour la peine, te voila obligé de faire le niveau intermédiaire de :
hors-sujet/mots-croises-avec-regex-t273082.html
Quand tout le reste a échoué, lisez le mode d'emploi...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

12 sept. 2015, 12:45

Indeed !

Au fil des tâtonnements et des corrections successives,
je n'avais pas prêté attention à ces parenthèses qui restaient.
Mea culpa...

Bon, ça marche pas malgré cette correction.
Doit y avoir un autre schmurtz, Je continue de chercher.

Merci !

PS : Affreux, tes mots croisés !

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

12 sept. 2015, 13:37

Bon, j'ai opté pour cette écriture :
RewriteRule ^[a-z]*\/?edito-([0-9]+)\.htm$       /index.php?p=11&n=$1  [L]
mais les paramètres $_GET['p'] et $_GET['n'] ne sont pas transmis.

Je creuse...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

12 sept. 2015, 15:08

Le testeur de https://regex101.com/ me dit que j'ai tout bon,
mais les paramètres ne passent pas.

Mammouth du PHP | 2703 Messages

12 sept. 2015, 15:18

ils passent mieux si c'est l'url index.php?p=11&n=$1 qui est appelée directement ?

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

12 sept. 2015, 16:20

J'ai trouvé !!!

J'ai un peu honte de l'avouer, mais... j'avais merdé dans le RewriteBase. :oops:

Merci pour votre aide ! ;)