2017-05-09 1 views
1

Dans le cadre d'une refonte de site Web, je souhaite rediriger les URL statiques avec lang param vers des URL statiques sur un autre domaine, en utilisant .htaccess. URL sont construites comme ceci:Rediriger 301 URL de langes statiques vers un autre domaine

www.example.com/first-page/?lang=it >> www.example.it/prima-pagina/ 
www.example.com/first-page/?lang=fr >> www.example.fr/premiere-page/ 

www.example.com/another-page/?lang=it >> www.example.it/unaltra-pagina/ 
www.example.com/another-page/?lang=fr >> www.example.fr/autre-page/ 

www.example.com/folder/last-page/?lang=it >> www.example.it/record/ultima-pagina/ 
www.example.com/folder/last-page/?lang=fr >> www.mydomain.fr/dossier/derniere-page/ 

J'ai déjà essayé réoriente simples comme RedirectMatch 301 ....... Et aussi des URL plus complexes par RewriteCond et RewriteRule, à la fois, sans succès ...

Répondre

0

Vous allez besoin d'utiliser mod_rewrite (RewriteCond/RewriteRule) afin de faire correspondre la partie chaîne de requête de l'URL. Comme il ne semble pas y avoir de corrélation entre le chemin URL des URL source et cible, et que celles-ci semblent être différentes pour chaque langue, vous devrez les faire individuellement dans .htaccess.

Par exemple:

www.example.com/first-page/?lang=it >> www.example.it/prima-pagina/ 
www.example.com/first-page/?lang=fr >> www.example.fr/premiere-page/ 

Les couvertures suivantes seulement les deux premières réoriente.

RewriteEngine On 

RewriteCond %{QUERY_STRING} ^lang=(it) 
RewriteRule ^first-page/$ http://www.example.%1/prima-pagina/? [R,L] 

RewriteCond %{QUERY_STRING} ^lang=(fr) 
RewriteRule ^first-page/$ http://www.example.%1/premiere-page/? [R,L] 

Le parenthesised sous-motif (par ex. (fr)) est un groupe de capture et permet une référence arrière de la forme %1 de se référer au contenu (par exemple. fr) dans la substitution RewriteRule. Si vous n'utilisez pas de parenthèses, vous ne pouvez pas le faire.

La ? à la fin de la substitution supprime la chaîne de requête de la demande.

S'il s'agit de redirections permanentes, modifiez R en R=301, mais seulement une fois que vous avez confirmé que cela fonctionne correctement. (301s sont mis en cache par le navigateur.)

MISE À JOUR: Si la valeur du paramètre URL ne correspond pas au domaine TLD, vous devez juste être explicite et le nommer. Par exemple:

RewriteCond %{QUERY_STRING} ^lang=aa 
RewriteRule ^first-page/$ http://www.example.bb/prima-pagina/? [R,L] 
+0

Hi. Merci pour votre réponse. Il semble que ça ne marche pas. Rien ne se passe. J'ai essayé avec ou sans "sous-dossiers", avec et sans "(" et ")" autour du paramètre langu. J'ai aussi essayé d'enlever "% 1" et de le remplacer par le domaine ext. - Plus: que puis-je faire si le paramètre lang n'est pas égal à l'extension du domaine? – Romain

+0

Avez-vous d'autres directives dans votre fichier '.htaccess'? Tout autre fichier '.htaccess'? Mod_rewrite est-il installé/activé? Les fichiers '.htaccess' sont-ils autorisés? J'ai mis à jour ma réponse en ce qui concerne le paramètre lang par rapport à domain ext étant différent - dans ce cas, vous aurez juste besoin de spécifier les deux (pas de raccourci). Ajout d'un peu plus d'informations expliquant l'expression rationnelle (ie '(', ')' et '% 1'). – MrWhite

+0

Encore une fois. Oui, j'ai déjà des directives dans mon fichier '.htaccess', qui est utilisé pour Worpress. J'ai essayé de mettre vos règles de réécriture dans la zone '', sans succès. MAIS il semble que les pages d'accueil fonctionnent: 'RewriteCond% {QUERY_STRING}^lang = fr RewriteRule^http: //www.domain .com /? [R = 301, L] 'mais pas les pages internes. – Romain