Version complète: sur le forum Webmaster Hub : RewriteRule, v2 d'un site et variables
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > Fichier .htaccess et réécriture d'URLs
consollection
Bonjour,
je suis en train de monter la v2 d'un site d'annuaire.
Je veux diriger de façon permanente mes pages.
Voici un exemple :
la,categorie.php?choix=23 en -http://www.annuaire.com/23/go/agences-de-voyage.html
Il y aura par la suite une routine pour faire fonctionner la seconde adresse.
J'ai une 60éne de page de ce type.
J'ai essayé sans aucun succès ces informations :
CODE
RewriteRule ^la,categorie\.php\?choix=23$ http://www.annuaire.com/23/go/agences-de-voyage.html [R=permanent]
RewriteRule ^la,categorie\.php\?choix=23 http://www.annuaire.com/23/go/agences-de-voyage.html [R=permanent]
RewriteRule ^la,categorie\.php?choix=23 http://www.annuaire.com/23/go/agences-de-voyage.html [R=permanent]
RewriteRule ^la,categorie\.php?choix=23$ http://www.annuaire.com/23/go/agences-de-voyage.html [R=permanent]
RewriteRule ^la,categorie\.php\?choix\=23$ http://www.annuaire.com/23/go/agences-de-voyage.html [R=permanent]

Par contre ceci fonctionne :
CODE
RewriteRule ^la,categorie\.php http://www.annuaire.com/23/go/agences-de-voyage.html [R=permanent]

Avez-vous une idée? Chaque choix doit être dirigé vers une url spécifique.
Je suis sur OVH en mutualisé.
Cordialement,
Ben-J

EDIT TheRec, Modérateur > Merci d'utiliser les BB Codes pour présenter tes codes, ton message a été édité dans ce sens. Si tu as besoin d'aide à ce propos, clique sur le lien "Aide BB Code" qui se trouve en dessous de la liste d'émoticons lorsque tu rédiges un message.
TheRec
Bonjour,

je te conseille la lecture de ce sujet (surtout les dernières interventions ou se trouve la réponse), il traite du même problème que le tiens à mon avis.

La deuxième partie te ta RewriteRule étant une URL, la redirection avec statut 301 (permanent) se fera toute seule... et je ne suis pas certain que le flag "R" puisse prendre comme valeur "permanent"... il faut lui donner un nombre de statut : 301, 302, etc.
consollection
Je n'ai pas trouvé réponse à mon problème.
Là il n'y a pas de query dynamique mais une redirection d'une URL précise vers une autre déterminée.
Une idée?
Pagetronic
Etrange ton htacess...

moi j'utilise ca chez OVH
CODE
RedirectPermanent /spationaute-troglodyte/index.php http://www.pagetronic.info/spationaute-troglodyte/spationaute-troglodyte.tronic


Par contre petit conseil.. méfis toi des repertoirs à la noix type "23"
parce que je te sent bien revenir nous faire un post du genre :
Mon site n'est plus indexé après un rewrite whistling.gif
consollection
CITATION(Pagetronic @ mardi 27 juin 2006, 14h08) *
CODE
RedirectPermanent /spationaute-troglodyte/index.php http://www.pagetronic.info/spationaute-troglodyte/spationaute-troglodyte.tronic

Ton exemple n'a pas de query string wacko.gif

CITATION(Pagetronic @ mardi 27 juin 2006, 14h08) *
Par contre petit conseil.. méfis toi des repertoirs à la noix type "23"

Quel est le problème? unsure.gif
TheRec
Je reprends l'exemple dans le message que j'ai cité précédemment :
CODE
RewriteEngine On
RewriteCond %{QUERY_STRING} ^page=(.+)$
RewriteRule ^index.php$ %1.php? [L]

La partie (.+) correspond au sous-masque "au moins 1 caractère quel qu'il soit"... Si ton but à toi est de ne faire correspondre que "23", met le simplement "en dur" :
CODE
RewriteEngine On
RewriteCond %{QUERY_STRING} ^choix=23$
RewriteRule ^la,categorie\.php$ http://www.annuaire.com/23/go/agences-de-voyage.html? [L]

Le seul moyen d'analyser la QueryString depuis un fichier .htaccess c'est d'utiliser RewriteCond... RewriteRule, ne prend pas en compte la QueryString lors de l'analyse de l'expression régulière (c'est pour cela que seule ta dernière règle fonctionnait dans les exemples que tu as cités).

Si tu as besoin d'explications sur le déroulement des directives RewriteCond et RewriteRule tu as le manuel Apache à ce sujet et le message que j'ai cité précédemment où j'explique la syntaxe que j'ai utilisée.

Et pour citer le manuel lui-même, un RedirectPermanent ne peut pas faire cela :
CITATION
mod_alias is designed to handle simple URL manipulation tasks. For more complicated tasks such as manipulating the query string, use the tools provided by mod_rewrite.
Dan
CITATION(consollection @ mardi 27 juin 2006, 14h22) *
Ton exemple n'a pas de query string wacko.gif

Lors de l'utilisation du RedirectPermanent, pas besoin du QUERY_STRING, il est ajouté automatiquement par Apache.

J'utilise cela pour rediriger les différents TLD de webmaster-hub vers le .com

Par exemple, pour ce post sur le .eu:
http://www.webmaster-hub.eu/index.php?s=&a...st&p=181685

Et il y a bien une query_string, non ? wink.gif
TheRec
Après relecture de ton message, si tu dois rediriger 60 pages vers chaque fois une URL différente et que les paramètre de la nouvelle URL ne se trouvent pas dans l'ancienne URL tu as deux choix :
  • Tu fais 60 fois la règle que je t'ai indiquée en donnant la nouvelle URL à chaque fois... et en changeant la condition sur le paramètre "choix"... ce n'est pas vraiment la solution que je te conseille...à chaque requêtes toutes les conditions seront analyées (enfin à moin qu'une des conditions ait été validée).
  • Tu es capable de composer ton URL à partir de ta base de données et tu pourras effectuer cette redirection depuis PHP... une redirection peut se faire grâce à la fonction header.
Un exemple de redirection avec code 301 (histoire de conserver ton PR) :
CODE
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.annuaire.com/".$id_de_la_categorie."/go/".$nom_de_la_categorie.".html");
exit();
?>

Ce code doit interpréter avant que tout autre caractère ne soit envoyé au navigateur de ton visiteur...tu auras plus de précision dans le manuel PHP. Si tu veux faire simple il suffit de remplacer le contenu de "la,categorie.php"...tu récupères les informations nécessaires depuis ta base de données par exemple grâce aux paramètre donnée par l'URL ($_GET['choix'] en l'occurrence) et tu effectues la redirection.
Pagetronic
Pour les repertoires, j'ai un ami qui s'arrache les cheveux pour faire indexer sont dotclear qui a des url à la noix comme les tiennes..
Google trainerait la pate pour reconnaitre les divers thématiques du site..

Fais comme tu veux, mais moi maintenant quitte à rewrite je rewrite proprement..

-http://www.vins-france.info/

Je ne peux pas te le prouver mais il se dit la meme chose sur des forums US selon lui
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.