J'ai de la difficulté à rediriger des URL sur un site multilingue de Joomla.
Le nouveau site a la structure d’URL suivante: http://sitename.com/[language]/[pagename].html
et l'ancienne structure d'URL de site est la suivante: http://sitename.com/[pagename]?lang=[language]
.
J'ai essayé plusieurs incantations regex mais aucune d'entre elles ne fonctionne. Il semble que les réécritures multilingues de Joomla les écrasent d'une manière ou d'une autre.
Voici l'une des expressions rationnelles que j'ai utilisées, j'ai également essayé avec redirect:
RewriteRule /(.+)\?lang=(.+) /$2/$1.html [L,R=301]
Cela ne fonctionne tout simplement pas, peu importe comment je le mets et je veux rediriger les anciennes URL vers les nouvelles.
Tout d'abord, je ne suis en aucun cas un gourou .htaccess, mais voici une idée qui pourrait fonctionner:
RewriteCond %{QUERY_STRING} .*lang=en.*
RewriteRule ^(.*)$ /en/$1.html? [R=301,L]
RewriteCond %{QUERY_STRING} .*lang=es.*
RewriteRule ^(.*)$ /es/$1.html? [R=301,L]
RewriteCond %{QUERY_STRING} .*lang=no.*
RewriteRule ^(.*)$ /no/$1.html? [R=301,L]
Vous devrez répéter les deux lignes pour chaque langue que vous souhaitez rediriger, mais cela ne devrait pas être difficile, sauf si vous avez une quantité folle de langues.
La première règle vérifie si lang=en
est présent dans l'URL, et si c'est le cas, l'URL est réécrite en utilisant /en/
Sur le chemin. Le ?
dans html?
supprime tout paramètre d'URL. Le paramètre L
force la règle à être la dernière et toute règle ci-dessous est ignorée.
Vous pouvez tester cela (et d'autres solutions) en utilisant testeur htaccess.
J'espère que ça aide, au moins ça vaut le coup d'essayer.
Vous voudrez peut-être essayer un outil appelé Mod Rewrite Generator ( http://www.generateit.net/mod-rewrite/index.php ).
C'est un outil qui vous permet d'insérer n'importe quelle URL avec des paramètres (domain.com/index.php?lang=fr), puis de choisir comment vous souhaitez les utiliser dans l'URL finale, puis de vous donner le code de votre .htaccess
fichier.
Je trouve cela utile dans beaucoup de situations.