Version complète: sur le forum Webmaster Hub : Impossible de URL rewriter ?
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > Fichier .htaccess et réécriture d'URLs
mandala75
Bonjour,

Je voudrai ajouter une nouvelle fonction de réécriture dynamique à un site en projet mais cela ne marche pas sad.gif

Préalable : j'utilise ddéjà des .htaccess chez cet hébergeur, aucun souci, ca marche donc ca ne vient pas de ca !

Mon url est de la forme :

getperson.php?personID=1524I&tree=1

Je souhaite une URL de la forme

getperson-1524I-tree-1.html

Je pensais mettre ca en .htaccess

CODE
Options +FollowSymlinks
RewriteEngine on

RewriteRule ^getperson-([0-9]+)-tree-([0-9]+)\.html$ getperson.php?personID=$1&tree=$2 [L]


mais ca ne marche pas... J'ai regardé, re-regardé...

Bref où me plantè-je ?

Merci d'avance
mandala75
J'ai trouvé ce qui ne va pas : ma 1ère variable comporte 5 chiffres ET une lettre sad.gif
Mais ca je ne sais pas le traduire en réécriture sad.gif
Merci de votre aide !
TheRec
Bonjour,

ceci devrait faire l'affaire :
CODE
RewriteRule ^getperson-([0-9a-zA-Z]{5})-tree-([0-9]+)\.html$ getperson.php?personID=$1&tree=$2 [L]

Le flag NC signifie que l'expression n'est plus sensible à la casse (majuscules/minuscules) et que les lettres seront converties en minsucules. Dans l'expression précédente personID peut contenir une lettre ou plusieurs à n'importe quel place...

Si par exemple ton personID est composé de 4 chiffre suivis d'une lettre tu peux définir une nouvelle classe, ainsi :
CODE
RewriteRule ^getperson-([0-9]{4}[a-zA-Z]{1})-tree-([0-9]+)\.html$ getperson.php?personID=$1&tree=$2 [L]
mandala75
Merci Patrick,

J'ai essayé les deux mais... ca ne marche pas sad.gif
Je suppose que le {x} indique le nombre de caractères numériques ?
J'ai donc porté cette valeur à 5 et ai testé avec une page dont la variable était 5 chiffres et une lettre --> même résultat sad.gif
Aurais-tu une autre suggestion ?

De plus si la variable se termine toujours par une lettre, elle ne comporte pas toujours 5 chiffres... pour l'instant 5 est le maximum (donc de 0 à 5 caractères) mais ce chiffre grossira avec la base...

Je n'aime pas ne pas comprendre wink.gif

Encore merci
Bourinho
Je te propose ça...
CODE
RewriteRule ^getperson-([0-9]*[a-zA-Z])-tree-([0-9]+)\.html$ getperson.php?personID=$1&tree=$2 [L]


Pour t'expliquer le "bazar"...
([0-9]*[a-zA-Z]) signifie "mets dans $1 ce qui sera entre le parenthèses", ici, il s'agira d'une suite de chiffres (dont la longueur est superieure ou egale a 0) suivi d'une lettre.
([0-9]+) signifie "mets dans $2 ce qui sera entre le parenthèses", ici, il s'agira d'une suite de chiffres (dont la longueur est superieure ou egale à 1)

Je pense que c'est ce que tu recherches au niveau de la Regex...mais pour le reste de la syntaxe... je n'ai encore jamais testé l'URL Rewriting blink.gif
mandala75
Merci Bourinho

Si tôt donné si tôt essayé

CODE
Options +FollowSymlinks
RewriteEngine on

RewriteRule ^getperson-([0-9]*[a-zA-Z])-tree-([0-9]+)\.html$ getperson.php?personID=$1&tree=$2 [L]


ne marche pas non plus angry.gif l'URL n'est absolument pas réécrite mais cela ne produit pas d'erreur sur le serveur wink.gif
TheRec
Es-tu sûr que le mode Rewrite est en fonction sur ton hébergement ?

Quel message d'erreur (401,500) obtiens-tu lorsque tu essaies d'accéder à une page avec une URL réécrite ?

J'ai testé les propositions que je t'ai faites avant de les poster, elles fonctionnent sans problème (sous Linux comme sous Windows).

Et effectivement l'expression {x} définit le nombre de caractères de la classe qui la précède. Tu peux également donner une intervalle {4,10} ou même une intervalle non-finie {4,} (cela signifie : 4 caractères au moins ou plus)
CITATION(mandala75 @ mercredi 24 mai 2006, 16h11)
ne marche pas non plus  angry.gif
Il n'y a pas de quoi s'énerver, on va sûrement trouver une solution wink.gif
mandala75
Merci TheRec !

Oui le mode Rewrite est activé et fonctionne. Je l'utilise déjà dans certains répertoires notamment pour des redirections 301 et, à toutes fins utiles, j'ai posé la question à l'hébergeur qui me l'a confirmé... donc là n'est pas le pb !

Message d'erreur ? Aucun c'est bien là le pb... Il ne se passe RIEN, l'URL reste comme elle était, le .htaccess semble ignoré. En revanche, quand il y a une vraie erreur de syntaxe sur le .htaccess, j'obtiens une erreur 500.

Une solution ? Je n'en doute pas... Ce n'est qd même pas Linux qui va avoir raison de nous wink.gif

Encore merci pour votre patience !
TheRec
Utilise le flag [R=301] avec ta règle, histoire de voir si la réécriture est effectuée correctement... cela fera une redirection et tu verras l'URL utilisée en interne par Apache.

Sinon j'avais un problème similaire avec un hébergeur, j'ai fini par devoir échapper les esperluettes (&) entre les paramètres de l'URL...

Cela donne quelque chose comme :
CODE
RewriteRule ^getperson-([0-9a-zA-Z]{5})-tree-([0-9]+)\.html$ getperson.php?personID=$1\&tree=$2 [R=301,L]


Il faut également ne pas oublier de transférer en mode ASCII le fichier .htaccess lorsque c’est fait par FTP, c’est essentiel.
Phobos
CITATION
l'URL reste comme elle était

Il faut que tu ailles à l'url que tu veux obtenir pour voir le résultat qu'aurait donné l'url normale, c'est tout le principe de l'URL Rewriting smile.gif
mandala75
Merci encore mais... rien ne se passe !
J'ai l'impression de passer à côité d'un truc simplissime...
J'avais pensé au transfert ASCII le problème n'est pas là...
J'ai regardé minutieusement l'URL à réécrire pour voir s'il n'y avait pas une erreur, un caractère... non

Quelques exemples :

getperson.php?personID=7184I&tree=1
getperson.php?personID=7188I&tree=1
getperson.php?personID=1105I&tree=1

Je viens de recontacter l'hebergeur qui me conseille de mettre un / devant l'URL à réécrire... marche pas non plus !
A defaut d'y perdre mon latin, je vais y perdre mon Apache moi...
TheRec
Les exemples que tu cites, correspondent-ils aux l'URL vers lesquelles tu es redirigé (grâce au Flage R=301) lorsque tu utilises respectivement les URL
  • getperson-7184I-tree-1.html
  • getperson-7188I-tree-1.html
  • getperson-1105I-tree-1.html
dans ton navigateur ?

Si c'est le cas c'est que ta réécriture fonctionne bien.
mandala75
CITATION(TheRec @ mercredi 24 mai 2006, 18h30)
Les exemples que tu cites, correspondent-ils aux l'URL vers lesquelles tu es redirigé (grâce au Flage R=301) lorsque tu utilises respectivement les URL dans ton navigateur ?

Si c'est le cas c'est que ta réécriture fonctionne bien.
*


Hélas non sad.gif
TheRec
Cela ne me dit toujours pas ce que tu obtiens lorsque tu utilises le flag [R=301] :S

S'il effectue une réécriture tu devrais voir l'adresse changer (redirection)... sinon c'est qu'aucune règle ne correspond à l'URL entrée...

Ce que je peux te garantir c'est que ces expression régulières sont correctes, donc le problème se situe au niveau du serveur. Je les ai testé sous Windows (environement de test) et Linux (environement de test et production).

Tu dis avoir d'autres règles de réécriture en fonction, es-tu sûr qu'aucune d'elles ne réécrit ton URL avant celle dont nous discutons ?
Bourinho
Ouf TheRec, tu me rassures...je n'ai garanti que la Regex...A partir de là, je ne peux être mis en cause!!!! laugh.gif

Blague mis à part, c'est quand même curieux ce qui se passe sur ton serveur!!!
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.