Aller au contenu

Sujets conseillés

Posté (modifié)

Avec mon .htaccess, je cherche à détecter un /fr/ ou /en/ ou bien /de/ et aller chercher le fichier dont la suite de l'url indique en ajoutant ?l=<en | fr | de>

Mais ce quej'ai fais ne marche pas, je ne sais pas pourquoi:

 RewriteRule ^([a-z])([a-z])/(.*)?(.*)$ http://www.domain.com/$3?l=$1$2&$4 [nc]

Exemple:

domain.com/fr/home.php?show=all&variable=valeur

va chercher le fichier:

domain.com/home.php?l=fr&show=all&variable=valeur

mais je n'arrive pas à generer $4, ce que je trouve logique parceque $3 est (.*) donc logiquement ca va jusqu'à la fin, mais comment j'utilise le regex pour s'arreter à un "?"

 RewriteRule ^([a-z])([a-z])/(.*!?)?(.*)$ http://www.domain.com/$3?l=$1$2&$4 [nc]

Ca ne marche pas...

Alors je vais devoir avoir deux lignes de code un pour gerer s'il y a des valeurs get et l'autre s'il y a pas de "?"

 RewriteRule ^([a-z])([a-z])/(.*!?)?(.*)$ http://www.domain.com/$3?l=$1$2&$4 [nc]

RewriteRule ^([a-z])([a-z])/(.*!?)$ http://www.domain.com/$3?l=$1$2 [nc]

Quel est la bonne methode pour soit exclure le caractere "?" de (.*) ou alors la bonne methode pour inclure un "." et un "/" dans un ([a-zA-Z0-9_-])

Modifié par djp1988
Posté

Tout simplement parce que le query string est exclu de la règle et qu'il faut le traiter à part.

Si tu veux l'ajouter, il suffit de mettre le flag [QSA]

RewriteRule ^([a-z])([a-z])/(.*) http://www.domain.com/$3?l=$1$2 [NC,QSA]

Posté

Et "?" est un caractère spécial dans une regex (comme *, +, ., etc.), qui signifie "0 ou 1 fois l'élément précédent".

Il faut donc l'escaper (avec un \).

Sinon de façon plus générale, pour que .* prenne tout jusqu'à un caractère donné, tu peux utiliser "[^x]*", x étant le caractère à ne pas prendre en compte (ça veut dire "de 0 à n fois tout caractère sauf x").

Jacques.

Veuillez vous connecter pour commenter

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



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