Beno Posté 11 Septembre 2012 Posté 11 Septembre 2012 Bonjour à tous, Je me permets de poster ma demande car ça fait un moment que je cherche en vain une solution à mon problème. Je suis en train de mettre place la réécriture d'URL pour mon site, jusque là ça fonctionne bien. Par exemple : RewriteRule ^ventes-en-exclusivite/page-([0-9]+)/tri-(.*)$ ./exclusivites.php?page=$1&choix_tri=$2 [L] Là où ça bloque c'est lorsque j'essaye de faire une redirection 301 dans la foulée. Voici mon code : RewriteCond %{QUERY_STRING} ^page=([0-9]+)&choix_tri=(.*)$RewriteRule ^exclusivites.php$ http://www.monsite.com/ventes-en-exclusivite/page-%1/tri-%2? [R=301,L]RewriteRule ^ventes-en-exclusivite/page-([0-9]+)/tri-(.*)? ./exclusivites.php?page=$1&choix_tri=$2 [L] Ca me fait une boucle infinie. Merci par avance pour votre aide.
Dan Posté 11 Septembre 2012 Posté 11 Septembre 2012 Il te sert à quoi le "?" de ta règle ?? RewriteRule ^ventes-en-exclusivite/page-([0-9]+)/tri-(.*)? ./exclusivites.php?page=$1&choix_tri=$2 [L] Parce qu'il rend ce qui précède, donc le (.*) , facultatif ! Si c'est pour "matcher" le ? final de ta redirection 301, c'est inutile car ce dernier ne sera jamais transmis vu qu'il est là pour empêcher l'ajout du QUERY_STRING !
Beno Posté 11 Septembre 2012 Auteur Posté 11 Septembre 2012 (modifié) Merci pour ta réponse. Justement, je n'étais pas sûr de l'utilité du "?". Je teste sans. [edit] Si je vais sur http://www.monsite.com/exclusivites.php?page=3&choix_tri=surf_hab_asc la réécriture fonctionne car l'URL devient http://www.monsite.com/ventes-en-exclusivite/page-3/tri-surf_hab_asc mais je tombe toujours sur une page d'erreur ("Cette page Web présente une boucle de redirection"). [/edit] Modifié 11 Septembre 2012 par Beno
Dan Posté 11 Septembre 2012 Posté 11 Septembre 2012 Il semble bien que la deuxième règle, qui génère "exclusivites.php?page=$1&choix_tri=$2" passe à nouveau dans la condition au début de fichier, malgré le flag [L], ce qui fait boucler tes réécritures. Tu es certain que tu as le flag [L] en place ? SI tu es sur dédié, tu peux utiliser RewriteLogLevel et un RewriteLog dans le fichier httpd.conf pour voir précisément ce que ça fait.
Dan Posté 11 Septembre 2012 Posté 11 Septembre 2012 Essaie sans mettre le ./ au second argument de ta règle, il force peut-être une redirection externe, ce qui expliquerait le passage par ta condition. RewriteRule ^ventes-en-exclusivite/page-([0-9]+)/tri-(.*) exclusivites.php?page=$1&choix_tri=$2 [L]
Beno Posté 11 Septembre 2012 Auteur Posté 11 Septembre 2012 Le flag [L] est bien en place. Je suis sur serveur mutualisé malheureusement (Infomaniak). Ce cas est-il fréquent ?
Beno Posté 11 Septembre 2012 Auteur Posté 11 Septembre 2012 Je n'avais pas vu ta seconde réponse. Même sans le "./" le souci est le même. Il s'agit de répertoires virtuels, peut être est-ce l'origine du problème ?
Message populaire. Dan Posté 11 Septembre 2012 Message populaire. Posté 11 Septembre 2012 J'ai testé ce fichier sur mon serveur, et manifestement ça boucle ! Dans ce cas, renomme ton fichier exclusivites.php en exclusivites_2.php et change ta dernière règle. Ceci fonctionne chez moi : RewriteEngine OnRewriteCond %{QUERY_STRING} ^page=([0-9]+)&choix_tri=(.*)$RewriteRule exclusivites.php http://www.le-hub.com/ventes-en-exclusivite/page-%1/tri-%2? [R=301,L]RewriteRule ventes-en-exclusivite/page-([0-9]+)/tri-(.*)? exclusivites_2.php?page=$1&choix_tri=$2 [L] J'imagine que c'est pour de l'optimisation SEO que tu fais une 301 ? 1
Beno Posté 11 Septembre 2012 Auteur Posté 11 Septembre 2012 (modifié) Il me faut donc renommer mon fichier "exclusivites.php" en "exclusivites_2.php" sur le serveur ? Ca ne va pas poser de problème pour le référencement du coup ? La redirection 301 permettant justement de conserver ce référencement non ? Je me trompe peut être, j'avoue que c'et assez flou. [edit]Oui, c'est bien pour ne pas perdre le référencement [/edit] Modifié 11 Septembre 2012 par Beno
Dan Posté 11 Septembre 2012 Posté 11 Septembre 2012 Tu ne perdras pas le référencement, vu que tu fais une redirection 301. Donc de toute manière, avec cette redirection, plus personne ne verra ton fichier exclusivites.php qui ne doit même plus exister. Il ne sera donc qu'à usage interne à ton site. Tu peux bien le nommer comme tu veux, dan.php si ça te chante Le reste du monde verra la nouvelle URL !
Beno Posté 11 Septembre 2012 Auteur Posté 11 Septembre 2012 Je tombe sur une page d'erreur maintenant, 404. Par contre je dois quitter le boulot, je reprends demain.
Dan Posté 11 Septembre 2012 Posté 11 Septembre 2012 Il faut : - renommer le fichier - le changer dans la dernière règle !
Beno Posté 11 Septembre 2012 Auteur Posté 11 Septembre 2012 Si c'est bon ça fonctionne ! Je saisissais mal l'URL En tout cas merci beaucoup pour ton aide !
Beno Posté 12 Septembre 2012 Auteur Posté 12 Septembre 2012 J'en profite pour éclaircir 2 petites choses et essayer de comprendre un peu mieux Sur la dernière ligne tu as remis le "?". Est-ce obligatoire dans ce cas ? Et sur les 2 lignes de rewriting tu n'as pas mis l'indication de début de chaîne "^", ça veut dire que c'est optionnel ?
Message populaire. Dan Posté 12 Septembre 2012 Message populaire. Posté 12 Septembre 2012 Le ? sur la dernière ligne est un oubli de ma part. J'ai copié/collé la règle et ai oublié de l'enlever L'indicateur de début de chaîne est optionnel... surtout que selon la config du serveur il peut y avoir aussi un / qui débute la chaîne. Donc, pour couvrir tous les cas, ceci est plus portable pour les débuts de chaînes : ^/? Cela signifie qu'au début de ligne il peut y avoir optionnellement un caractère / 1
Beno Posté 12 Septembre 2012 Auteur Posté 12 Septembre 2012 Maintenant tout est clair ! Encore merci.
suzanne Posté 12 Septembre 2012 Posté 12 Septembre 2012 salut j'ai profitée de votre question réponse pour résoudre mes soucis merci c'est ça l'utilité des forums.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant