URL Rewriting pour site multi-langue (?lang=fr|en)
Bonjour,
J'ai un site internet avec une variable GET lang sur toutes mes pages.
Pour changer la langue, c'est simple, je met soit ?lang=fr soit ?lang=en.
Par contre, pour que ce soit plus propre, et surtout pour que les liens hypertexte conserve la langue (la variable GET) sans devoir faire quoique ce soit dans le code, il faut faire croire que le site se trouve dans un dossier. Comme ça, avec un chemin relatif, la langue est conservée sur toutes les pages.
Du coup, c'est fait pas mal de recherche, et j'ai déjà ça, et ça fonctionne :
Code:
RewriteRule ^(fr|en)/(.*).php$ $2.php?lang=$1 [L,QSA]
J'ai ensuite ajouté ceci (pour que l'index.php soit prit en charge) :
Code:
RewriteRule ^(fr|en)/$ index.php?lang=$1 [L,QSA]
Est-ce qu'il y a un meilleur moyen de procéder pour ça ?
Ensuite, c'est là que commence mes problèmes...
Je veux que l'on puisse accéder au site comme ceci : http://localhost/fr/ (fr ou en, avec un slash à la fin).
Mais pas comme ceci http://localhost/fr (sans slash).
Si il n'y à pas de slash, je veux que ça redirige avec le slash.
J'ai pensé à un truc comme ça, mais je pense que c'est pas le top :
Code:
RewriteRule ^(fr|en)$ http://%{HTTP_HOST}/$1/ [R=301,QSA]
Qu'en dites-vous ?
Ensuite, pour finir, et là, c'est mon plus gros problème : comment faire pour bloquer l'accès au site sans /fr/ ou /en/ dans l'URL ?
J'ai pensé à un truc comme ça, mais ça ne fonctionne pas.
Code:
1 2
| RewriteRule ^/?$ http://%{HTTP_HOST}/fr/ [R=301,QSA]
RewriteRule ^/(a-zA-Z0A-9).php$ http://%{HTTP_HOST}/fr/$1.php [R=301,QSA] |
J'aimerais que si on accède au site sans la variable dans l'URL (/fr/ ou /en/), que ça redirige vers le /fr/ par défaut).
Voici mon fichier total actuel :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Options +FollowSymlinks
RewriteEngine on
# Détection de la langue pour toutes les pages
RewriteRule ^(fr|en)/(.*).php$ $2.php?lang=$1 [L,QSA]
# Détection de la lanque pour index.php (si non présisée dans l'URL)
RewriteRule ^(fr|en)/$ index.php?lang=$1 [L,QSA]
# Interdiction (avec redirection) d'accès sans le slash final
RewriteRule ^(fr|en)$ http://%{HTTP_HOST}/$1/ [R=301,QSA]
# Interdiction (avec redirection) d'accès au site sans langue (variable)
RewriteRule ^/?$ http://%{HTTP_HOST}/fr/ [R=301,QSA]
RewriteRule ^/(a-zA-Z0A-9).php$ http://%{HTTP_HOST}/fr/$1.php [R=301,QSA] |
Merci d'avance pour votre aide.