Problème avec les répertoires sans le slash final

Nouveau WRInaute
Bonjour,

J'ai un petit problème qui semble plutôt basique mais je ne parviens pas à trouver une solution sur WRI et les autres sites.

J'utilise l'url rewriting pour créer des répertoires virtuels correspondant aux différentes langues d'un site.
Par exemple :
www.monsite.com/fr/ renvoie sur www.monsite.com/pages/index.php?lang=fr

Jusque là tout fonctionne bien. Voici ma règle de réécriture contenu dans mon htaccess :
Code:
RewriteRule ^fr/$ pages/index.php?lang=fr [L]

Par contre, cela ne fonctionne pas si je tape l'adresse www.monsite.com/fr (sans le slash final).

Tous mes liens internes comportent le slash final mais je pense au cas de l'utilisateur qui taperait l'adresse sans le slash et qui serait redirigé sur une page d'erreur.

Quelle est la solution pour éviter cela ?

Merci d'avance pour vos conseils.
 
WRInaute passionné
si tu sais pas trop faire, comme moi, des jolies expression réguliere, tu ajoutes

RewriteRule ^fr$ pages/index.php?lang=fr [L]

sinon, a la place de ton / final, tu trouve l'expression régulière qui permet de dire "/ ou rien"
 
WRInaute accro
Fais plutôt une redirection sur celui avec "/", cela t'évitera la duplication de contenu par la même occasion ;)

RewriteRule ^fr$ /fr/ [L,R=301]

et en dessous tu mets ta règle:

RewriteRule ^fr/$ pages/index.php?lang=fr [L]
 
Nouveau WRInaute
Merci Yoyos pour ta solution !

J'ai tout d'abord testé sur l'hébergement de mon client (Online.net pour ne pas nommer l'hébergeur) et ça ne marchait pas ! Je savais déjà que l'urlrewriting était un casse tête chez cet hébergeur (obligation de ne pas mettre de '^' avant les règles de réécriture...) mais j'arrivais à peut près à me débrouiller en bidouillant ! Mais là je crois avoir atteint les limites de l'url rewriting chez cet hébergeur.

Pour comparer j'ai fait un petit test rapide sur pour hébergement chez ovh et là ton exemple fonctionne nickel, avec ou sans slash final !!!
Résultat, je vais essayer de convaincre mon client de changer d'hébergeur ou bien s'il ne veut vraiment pas je me résoudrait à abandonner l'url rewriting (snif snif).
 
WRInaute passionné
J'ai cru remarqué que le [L] n'était pas nécessaire lorsqu'on indiquait [R=301] externe avec http:// (que la redirection "sortait" immédiatement sans [L]).

Depuis je ne l'ajoute plus mais je ne suis pas sûr...
Pouvez-vous me confirmer qu'il est optionnel ?



Bien sûr dans cet exemple, il ne serait pas utile de sortir de la séquence de ré-écriture pour continuer jusqu'à la règle suivante.


YoyoS a dit:
Fais plutôt une redirection sur celui avec "/", cela t'évitera la duplication de contenu par la même occasion ;)

RewriteRule ^fr$ /fr/ [L,R=301]

et en dessous tu mets ta règle:

RewriteRule ^fr/$ pages/index.php?lang=fr [L]
 
WRInaute accro
dorian53 a dit:
J'ai cru remarqué que le [L] n'était pas nécessaire lorsqu'on indiquait [R=301] externe avec http:// (que la redirection "sortait" immédiatement sans [L]).

Depuis je ne l'ajoute plus mais je ne suis pas sûr...
Pouvez-vous me confirmer qu'il est optionnel ?

yes yes.. dans ce cas précis le flag [L] n'est pas néccessaire
 
Discussions similaires
Haut