Page 1 sur 1
Url Rewriting et redirection 301
Posté : 28 nov. 2012, 16:08
par fahtman
Bonjour,
Afin de rendre mes url plus jolies je les ai "rewriter". Jusque là ça a été a peu près. J'ai ensuite voulu rediriger mes anciens lien vers les jolies url pour éviter les pages dupliquées. Ca marche bien mais forcement ça tourne en boucle et ça plante. L'url jolie dirige vers la vraie url qui est redirigé vers la jolie url et ainsi de suite. J'aimerais éviter ce comportement mais je ne sais pas comment m'y prendre. J'aurais donc besoin de votre savoir s'il vous plait

Voila le code que j'ai mis dans mon .htaccess et qui tourne en boucle.
Code : Tout sélectionner
RewriteRule ^([^/]+)/$ /index.php?ctrl=$1 [L,QSA]
RewriteCond %{QUERY_STRING} (?:^|&)ctrl=([^&]+)
RewriteRule ^index.php$ /%1/? [L,R=301]
Re: Url Rewriting et redirection 301
Posté : 28 nov. 2012, 16:58
par Saian
Attention l'url réécrite n'est pas sensée rediriger vers l'url non réécrite.
Elle est sensée recomposer l'url non réécrite afin que php puisse travailler comme si l'url n'était pas réécrite.
La compréhension de ceci te permettra peut être de comprendre la cause de l'erreur.
Sinon /%1/ c'est sensé faire quoi ?
EDIT les termes pouvant prêter à confusion. Ce que j'ai appelé url réécrite (à tord peut être ^^) c'est /blabla/ et la non réécrite c'est index.php?ctrl=blabla
Re: Url Rewriting et redirection 301
Posté : 28 nov. 2012, 22:05
par fahtman
Salut Saian, merci pour ta réponse.
Oui je crois que j'ai bien compris la réécriture. Le souci c'est que ma réécriture fonctionne et ma redirection aussi mais les deux ensembles ne fonctionnent pas...
Pour éviter les pages doublon, je voudrais que la page monsite.com/index.php?ctrl=blabla soit redirigée vers monsite.com/blabla/
Le %1 retranscrit ce qu'il y a dans la variable ctrl.
Re: Url Rewriting et redirection 301
Posté : 28 nov. 2012, 23:35
par Saian
T'es sûr que %1 retourne la valeur de ctrl ? ça voudrait dire que %1 retourne la deuxième parenthèse capturante de l'expression de comparaison de la RewriteCond ? (ou éventuellement le contenu du premier ou deuxième paramètre GET ?)
Je suis étonné, je connaissais pas.
Sinon le $ me dérange aussi sur la dernière RewriteRule. Il me semble que $ = fin de la chaine hors la chaîne n'est pas finie étant donné qu'il doit y avoir le QUERY_STRING derrière. Mais bon peut être que ça ne pose pas de problème.
Et le ? dans la substitution /%1/? il fait quoi ?
Par curiosité si tu désactives la première règle (par principe pour n'avoir qu'une condition et une règle dans le .htaccess) et que tu testes cette adresse index.php?ctrl=toto ça te redirige bien sur /toto/? ?
Et si les règles sont correctes je vois pas pourquoi ça boucle désolé. Y a bien un LAST sur la première règle et ce n'est pas une redirection donc c'est pas sensé refaire un test avec l'URL recomposée (non réécrite).
Sinon peut être bêtement en mettant la première règle en dernier...
Re: Url Rewriting et redirection 301
Posté : 29 nov. 2012, 23:31
par fahtman
Salut,
Alors j'ai fait quelques recherches et j'ai trouvé une solution, je ne sais pas si c'est la bonne mais ça marche

. Il faut rajouter le code suivant avant les instructions de réécriture et de redirection :
Pour essayer de répondre à tes questions.
Oui le %1 retourne la deuxième parenthèse capturante, je ne comprends pas pourquoi la deuxième et pas la première mais bon ça marche. Si quelqu'un une réponse à ça je suis preneur.
Le $ à la fin permet bien d'indiquer la fin de chaine. Ca permet de remplacer index.php mais pas index.phpblabla
Le ? à la fin permet de supprimer les variables en fin de chaine. Par exemple si je tape monsite.com/index.php?ctrl=blabla&id=blibli je me retrouve avec monsite.com/blabla et non pas monsite.com/blabla?ctrl=blabla&id=blibli. Moi j'aimerai monsite.com/blabla?id=blibli mais je n'ai pas trouvé comment faire...
Oui si je desactive la première règle la redirection marche niquel.
Voila ...
Re: Url Rewriting et redirection 301
Posté : 30 nov. 2012, 00:58
par two3d
Bonjour,
essaye ceci:
Code : Tout sélectionner
RewriteRule ^([a-z]+)-([0-9]+)$ index.php?ctrl=$1&id=$2 [L]
RewriteRule ^([a-z]+)$ index.php?ctrl=$1 [L]
Re: Url Rewriting et redirection 301
Posté : 30 nov. 2012, 12:33
par Saian
Salut fahtman, pas sur d'avoir bien saisi ton problème mais si ça marche avec la dernière règle que tu as trouvée, alors le sujet est résolu. Gratz !
Re: Url Rewriting et redirection 301
Posté : 30 nov. 2012, 18:24
par Fahman
Yes, sujet résolu. Merci
