mandala75 Posté 24 Mai 2006 Posté 24 Mai 2006 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 +FollowSymlinksRewriteEngine onRewriteRule ^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 Posté 24 Mai 2006 Auteur Posté 24 Mai 2006 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 !
TheRec Posté 24 Mai 2006 Posté 24 Mai 2006 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]
mandala75 Posté 24 Mai 2006 Auteur Posté 24 Mai 2006 (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é 24 Mai 2006 par mandala75
Bourinho Posté 24 Mai 2006 Posté 24 Mai 2006 (modifié) 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 Modifié 24 Mai 2006 par Bourinho
mandala75 Posté 24 Mai 2006 Auteur Posté 24 Mai 2006 (modifié) Merci Bourinho Si tôt donné si tôt essayé Options +FollowSymlinksRewriteEngine onRewriteRule ^getperson-([0-9]*[a-zA-Z])-tree-([0-9]+)\.html$ getperson.php?personID=$1&tree=$2 [L] ne marche pas non plus l'URL n'est absolument pas réécrite mais cela ne produit pas d'erreur sur le serveur Modifié 24 Mai 2006 par mandala75
TheRec Posté 24 Mai 2006 Posté 24 Mai 2006 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 Il n'y a pas de quoi s'énerver, on va sûrement trouver une solution
mandala75 Posté 24 Mai 2006 Auteur Posté 24 Mai 2006 (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é 24 Mai 2006 par mandala75
TheRec Posté 24 Mai 2006 Posté 24 Mai 2006 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.
Phobos Posté 24 Mai 2006 Posté 24 Mai 2006 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
mandala75 Posté 24 Mai 2006 Auteur Posté 24 Mai 2006 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 Posté 24 Mai 2006 Posté 24 Mai 2006 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 Posté 24 Mai 2006 Auteur Posté 24 Mai 2006 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
TheRec Posté 24 Mai 2006 Posté 24 Mai 2006 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 Posté 24 Mai 2006 Posté 24 Mai 2006 Ouf TheRec, tu me rassures...je n'ai garanti que la Regex...A partir de là, je ne peux être mis en cause!!!! Blague mis à part, c'est quand même curieux ce qui se passe sur ton serveur!!!
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant