Aller au contenu

Réécriture d'url ? encore un problème...


Sujets conseillés

Posté

Bonsoir,

L'url d'origine (par exemple):

www.monsite.fr/photos_annee.php?date=2005&dep=10

L'url réécrite:

www.monsite.fr/photos-2005-galerie-10.html

La ligne concernée dans le .htaccess:

RewriteRule  ^photos-([0-9]+)-galerie-([0-9]+)\.html$  /photos_annee.php?date=$1&dep=$2  [L]

Bien entendu, quelque chose foire, à savoir que je récupère ceci pour la variable $date: 2005-galerie-10, et aucune valeur pour la variable $dep.

Qu'ai-je ancore mal fait ?

xpatval

Posté

Bonsoir,

l'expression régulière est correcte... elle fonctionne sur mon serveur local ..mais j'ai déjà eu un problème similaire une fois, pour faire fonctionner la réécriture j'ai dû utiliser un anti-slash devant le & séparant les paramètres dans l'URL...

Ce qui donnerait :

RewriteRule  ^photos-([0-9]+)-galerie-([0-9]+)\.html$  /photos_annee.php?date=$1\&dep=$2  [L]

Je ne peux pas te garantir que cela fonctionnera...mais chez moi cela à fonctionné pour je ne sais quelle raison obscure !

Posté

Je viens d'essayer ta solution, mais sans résultat en local...Merci qd même.

xpatval

Posté

Désolé...

Cette expression régulière est correct je peux l'affirmer, elle fonctionne chez moi du moins...

Essaie de simplifier l'expression..avec un seul paramètre, puis d'ajouter le second une fois que le premier fonctionne ..par exemple :

RewriteRule  ^photos-([0-9]+)-galerie\.html$  /photos_annee.php?date=$1 [L,R=301]

Le R=301 te permet de voir l'URL finale sans avoir à afficher le contenu de $_GET...

Posté (modifié)

Bon, ne cherchons pas plus loin, j'ai la solution, ou plutôt la correction...

Ce que je n'avais pas dit était qu'il existait une autre règle, similaire:

RewriteRule  ^photos-([0-9]+)\.html$  /photos_annee.php?date=$1  [L]

la seconde qui posait problème:

RewriteRule  ^photos-([0-9]+)-galerie-([0-9]+)\.html$  /photos_annee.php?date=$1&dep=$2  [L]

Et ça, il aime pas !!

Donc, il suffit de modifier le nom de fichier réécrit, par exemple le deuxième.

les deux règles deviennent:

RewriteRule  ^photos-([0-9]+)\.html$  /photos_annee.php?date=$1  [L]

RewriteRule  ^photo-([0-9]+)-galerie-([0-9]+)\.html$  /photos_annee.php?date=$1&dep=$2  [L]

Ainsi, le problème se résout....

Merci à toi.

xpatval

Modifié par xpatval
Posté (modifié)

Bonjour,

tu peux garder la même syntaxe... mais il faut réflechir dans ce sens : La règle la plus "complexe" (restrictive) en premier.

Ainsi si la syntaxe la plus complexe ne correspond pas à la requête faite par l'utilisateur il va passer à la suivante qui est moins restrictive...et ainsi de suite.

Ta solution fonctionne, mais cela aurait aussi fonctionné en inversant l'ordre de ces deux règles, ce qui donne :

RewriteRule  ^photos-([0-9]+)-galerie-([0-9]+)\.html$  /photos_annee.php?date=$1&dep=$2  [L]
RewriteRule  ^photos-([0-9]+)\.html$  /photos_annee.php?date=$1  [L]

Ainsi tu conserves la logique de ton schéma d'URL.

Au passage, dans ce cas de figure il est bizarre que cette expression :

RewriteRule  ^photos-([0-9]+)\.html$  /photos_annee.php?date=$1  [L]

Ait pû contenir "2005-galerie-10"...car "-galerie-" ne correspond pas à la classe [0-9] ;) Mais je suppose que tu avais (.*) à la place :)

Que ce soit une "leçon" pour ceux qui souhaitent poser une question, il vaut mieux "trop" d'informations sur le problème que pas assez... enfin ça accélère le processus de réponse si on a tout les éléments en main pour répondre ;)

Modifié par TheRec
Posté
Au passage, dans ce cas de figure il est bizarre que cette expression :

RewriteRule  ^photos-([0-9]+)\.html$  /photos_annee.php?date=$1  [L]

Ait pû contenir "2005-galerie-10"...car "-galerie-" ne correspond pas à la classe [0-9] ;) Mais je suppose que tu avais (.*) à la place :)

Non, non, pas du tout. La règle ci-dessus fonctionnait sans problème. Cela étant, je vais inverser l'ordre des règles , avec la même orthographe pour le début de fichier. C'est effectivement un "truc" dont il faut se souvenir, mais je n'ai plus qu'un seul neurone, alors, hein, doucement...

;)

xpatval

Veuillez vous connecter pour commenter

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



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