LinKuFF Posté 18 Avril 2005 Posté 18 Avril 2005 (modifié) J'ai beau avoir cherché partout sur internet, je n'arrive pas à mettre la main sur une explication qui puisse me donner la solution... Je voudrais simplement utiliser l'url rewriting pour faire une redirection. J'ai donc un url du type : -http://www.test.com/page.php?mavariable=7203 Et je voudrais que lorsque quelqu'un tape cette adresse, il faut que cette personne soit redirigé directement vers : -http://www.test.com/page/7203/index.html par exemple. Attention, j'ai bien dit redirigé J'ai trouvé la méthode suivante : RewriteEngine on RewriteCond %{REQUEST_URI} !^/page.php$ RewriteRule .* - [L] RewriteRule ^.*$ %{QUERY_STRING} RewriteRule mavariable=1 http://www.test.com/page/1/index.html [R=301,L] RewriteRule mavariable=2 http://www.test.com/page/2/index.html [R=301,L] Mais si j'ai 7000 pages, j'ai pas envie de faire du cas par cas... En mettant : RewriteRule mavariable=1 -http://www.test.com/page/%{QUERY_STRING}/index.html [R,L], il me redirige vers -http://www.test.com/page/mavariable=7203/index.html donc c'est pas bon non plus... J'ai également essayé de replacer le page.php? par page\.php\? ou page\.php. mais sans succés... Aidez moi svp ! Modifié 19 Avril 2010 par Patrick
LinKuFF Posté 19 Avril 2005 Auteur Posté 19 Avril 2005 Apparemment je cale tout le monde avec ça Personne s'y connait assez pour avoir une petite idée ?
Dan Posté 19 Avril 2005 Posté 19 Avril 2005 Je ne pense pas que tu "cales" tout le monde. Je pense plutôt que tu prends le problème à l'envers faute d'une bonne compréhension du principe même de la réécriture d'URLs Le fichier qui existe physiquement sur ton disque est page.php, non ? Que veux-tu dire par: Attention, j'ai bien dit redirigé ??
LinKuFF Posté 19 Avril 2005 Auteur Posté 19 Avril 2005 Je connais bien le principe des url rewriting et je l'utilise d'ailleurs Le pb ici est différent. Mon site est passé à une nouvelle version, certaines pages n'existe donc plus mais sont toujours en lien dans des vieux dossiers. Ce que je voudrais donc c'est rediriger les personnes cliquant sur ces liens vers une adresse correcte. Exemple : L'ancienne url est page.php?id=7203 (page.php n'existe pas) La nouvelle est /dossier/7203/index.html (qui est un url rewriting pointant sur dossier.php?id=7203) Donc comment prendre en compte les paramètres dans les urls rewriting ? J'ai trouvé un début de réponse avec : rewritecond %{query_string} ^id=(.*)$rewriterule page\.php(.*)$ /dossier/%1/? [L,QSA,R=permanent] Mais le résultat est : "/dossier/7203/?id=7203"... Je capte pas pourquoi il me refou "?id=7203" en fin
Dan Posté 19 Avril 2005 Posté 19 Avril 2005 J'ai trouvé un début de réponse avec : rewritecond %{query_string} ^id=(.*)$rewriterule page\.php(.*)$ /dossier/%1/? [L,QSA,R=permanent] Mais le résultat est : "/dossier/7203/?id=7203"... Je capte pas pourquoi il me refou "?id=7203" en fin Tout simplement parce que tu utilises le flag QSA (Query String Append) qui rajoute en fin d'URL réécrite la Query String d'avant réécriture Dan
LinKuFF Posté 19 Avril 2005 Auteur Posté 19 Avril 2005 Tout simplement parce que tu utilises le flag QSA (Query Strin Append) qui rajoute en fin d'URL réécrite la Query String d'avant réécriture Dan <{POST_SNAPBACK}> Erf fausse joie avec QSA en moins, ça change rien
Dan Posté 19 Avril 2005 Posté 19 Avril 2005 En mettant: rewritecond %{query_string} ^id=(.*)$rewriterule page\.php(.*)$ /dossier/%1/ [R=301,L] Ca passe, non ?
LinKuFF Posté 19 Avril 2005 Auteur Posté 19 Avril 2005 En mettant: rewritecond %{query_string} ^id=(.*)$rewriterule page\.php(.*)$ /dossier/%1/ [R=301,L] Ca passe, non ? <{POST_SNAPBACK}> J'ai déjà essayé Aucun changement
Dan Posté 19 Avril 2005 Posté 19 Avril 2005 Chez moi, je viens de tester ceci qui fonctionne comme tu veux: rewritecond %{query_string} ^id=(.*)$rewriterule page\.php /dossier/%1/? [R=301,L] Dan
LinKuFF Posté 19 Avril 2005 Auteur Posté 19 Avril 2005 Chez moi, je viens de tester ceci qui fonctionne comme tu veux: rewritecond %{query_string} ^id=(.*)$rewriterule page\.php /dossier/%1/? [R=301,L] Dan <{POST_SNAPBACK}> Excellent !! En fait, j'avais mis : rewritecond %{query_string} ^id=(.*)$rewriterule page\.php(*.)$ /dossier/%1/? [R=301,L] Il y avait donc le "(*.)$" après page\.php qui fesait merder Merci pour ton profesionnalisme Dan
Dan Posté 19 Avril 2005 Posté 19 Avril 2005 Ce qui est surprenant est que "rewriterule page\.php(.*)$ ..." ne devait pas matcher autre chose que page.php vu que le caractère * correspond à "0 ou plusieurs instances de...". Le cas du "0 instance" était donc couvert, la query string ne faisant jamais partie de l'expression. Je vais faire une recherche sur le site Apache, car quelque chose m'échappe dans cette règle simple. Je posterai ici si je trouve le fin mot de l'histoire. Enfin, tant mieux si cela marche pour toi J'ai beau avoir cherché partout sur internet, je n'arrive pas à mettre la main sur une explication qui puisse me donner la solution... Il fallait venir sur le Hub plus tôt Dan
LinKuFF Posté 19 Avril 2005 Auteur Posté 19 Avril 2005 Il fallait venir sur le Hub plus tôt <{POST_SNAPBACK}> Je préfère chercher par moi même plutot que de crier à l'aide directement Mais je pense à ton site dés que ça devient du pb corcé
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant