Aller au contenu

Impossible de URL rewriter ?


Sujets conseillés

Bonjour,

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

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

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

Lien vers le commentaire
Partager sur d’autres sites

J'ai trouvé ce qui ne va pas : ma 1ère variable comporte 5 chiffres ET une lettre :(

Mais ca je ne sais pas le traduire en réécriture :(

Merci de votre aide !

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

ceci devrait faire l'affaire :

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 :

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

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Merci Patrick,

J'ai essayé les deux mais... ca ne marche pas :(

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

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

Encore merci

Modifié par mandala75
Lien vers le commentaire
Partager sur d’autres sites

Je te propose ça...

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:

Modifié par Bourinho
Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Merci Bourinho

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

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: l'URL n'est absolument pas réécrite mais cela ne produit pas d'erreur sur le serveur ;)

Modifié par mandala75
Lien vers le commentaire
Partager sur d’autres sites

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)

ne marche pas non plus  :angry:
Il n'y a pas de quoi s'énerver, on va sûrement trouver une solution ;)
Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

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

Encore merci pour votre patience !

Modifié par mandala75
Lien vers le commentaire
Partager sur d’autres sites

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 :

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 cest fait par FTP, cest essentiel.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

<{POST_SNAPBACK}>

Hélas non :(

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

Ouf TheRec, tu me rassures...je n'ai garanti que la Regex...A partir de là, je ne peux être mis en cause!!!! :lol:

Blague mis à part, c'est quand même curieux ce qui se passe sur ton serveur!!!

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...