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

  • Auteur de la discussion Auteur de la discussion matsa
  • Date de début Date de début
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.
 
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"
 
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]
 
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).
 
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]
 
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
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut