Réécriture d'url du type: www.site.fr/*.shtml?*=*

WRInaute accro
bonjour,

j'essaye de réécrire une url du type indiqué ci-dessus (titre).
Code:
RewriteRule ^([/a-zA-Z-]+)\.shtml\?([a-zA-Z-]+)=([a-zA-Z-]+)$ index.php?&page=$1&$2=$3 [L]

Le problème est simplement de faire prendre le \?
J'ai tester comme ceci RewriteRule ^([/a-zA-Z-]+)\.shtml\? mais ca ne fonctionne pas lorsque je met en url www.example.fr/test.shtml? !
Donc j'ai identifier le problème étant à ce niveau.

Pouvez vous m'aider ?
 
WRInaute accro
personne ne peut m'aider ?
J'ai vraiment besoin d'aide pour savoir comment inserer un ? dans l'url comme expliqué ci-dessus.

Help me!
thinks !
 
WRInaute occasionnel
tu ne peux pas faire comme ça. mod_rewrite va considérer deux entités :

REQUEST_URI et QUERY_STRING
la partie droite de ton URL après le ? sera dans QUERY_STRING et la 1ere partie dans REQUEST_URI

Or, dans la partie gauche d'une RewriteRule, tu ne traites que la partie REQUEST_URI...

Tu peux, de plus, utiliser l'option QSA qui ajoutera automatiquement les variables passées dans l'URL originale, comme tu sembles vouloir le faire ici en ajoutant $2=$3.

Donc, si tu veux juste ajouter page=$1, quel que soit le nombre de variables (0, 1, 5, etc...), fais juste :


Code:
RewriteRule ^([a-zA-Z-]+)\.shtml$ /index.php?page=$1 [L,QSA]

Si par contre tu veux que cela ne se fasse que lorsque tu as UNE seule variable (d'ou ton $2=$3), alors fais ceci :

Code:
RewriteCond %{QUERY_STRING} ^[a-zA-Z-]+=[a-zA-Z-]+$
RewriteRule ^([a-zA-Z-]+)\.shtml$ /index.php?page=$1 [L,QSA]
 
WRInaute accro
Super !!!!!
Merci pour ces explications très clair et enrichissante !!!!

Merci beaucoup à toi !
Je vais voir tout ceci de se pas !
 
WRInaute accro
ok ben j'apprends quelque chose en plus, par contre je ne suis pas très english ! ce sont des nom de domaine réservé ?
 
WRInaute accro
par contre sur ce code:
Code:
RewriteCond %{QUERY_STRING} ^[a-zA-Z-]+=[a-zA-Z-]+$
RewriteRule ^([a-zA-Z-]+)\.shtml$ /index.php?page=$1 [L,QSA]

le QSA est-il encore necessaire ? pas pour cette condition si ?
et la ca ne réponds pas vraiment à mon attente:

www.example.fr/test.php?rubrik=test&num=3

réécrire en /index.php?rub=test&num=dernier
par exemple....
 
WRInaute occasionnel
Je ne comprends pas ton exemple, sur quelle base veux-tu que mod_rewrite sache qu'il doit replacer num=3 par num=dernier ? De plus, dans ton exemple, tu cites test.php alors que tu veux matcher un fichier terminant en .shtml (et non .php)

Sinon, oui, le QSA reste obligatoire même après la RewriteCond qui n'est là que pour vérifier qu'on a UN argument et UN SEUL. Sinon, tu peux faire des groupes dans le RewriteCond, et récupérer leur contenu dans la suite avec %1, %2 au lieu de $1, $2, par exemple (et donc sans QSA) mais je ne vois pas l'interet par rapport au QSA, sauf pour modifier la variable en question :

Code:
RewriteCond %{QUERY_STRING} ^([a-zA-Z-]+)=([a-zA-Z-]+)$
RewriteRule ^([a-zA-Z-]+)\.shtml$ /index.php?page=$1&%1=%2 [L]
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut