Aller au contenu

Url rewriting avec paramètre


LinKuFF

Sujets conseillés

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é par Patrick
Lien vers le commentaire
Partager sur d’autres sites

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é
??
Lien vers le commentaire
Partager sur d’autres sites

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 :)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 :blink: avec QSA en moins, ça change rien

Lien vers le commentaire
Partager sur d’autres sites

En mettant:

rewritecond %{query_string} ^id=(.*)$
rewriterule page\.php(.*)$ /dossier/%1/ [R=301,L]

Ca passe, non ?

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 :clap:

Lien vers le commentaire
Partager sur d’autres sites

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 B)

Dan

Lien vers le commentaire
Partager sur d’autres sites

Il fallait venir sur le Hub plus tôt  B)

<{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é ^_^

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...