2016-05-27 5 views
2

Zunächst habe ich ein paar Domains, die auf dieselbe Webseite verweisen, wobei jede Domain einer anderen Sprache entspricht. Die Webseite (Drupal) identifiziert die Sprache unter Verwendung eines /lang Parameters in der URL (example.com/en). Ich brauche jede Domain zu seiner entsprechenden Sprache zu umleiten, damit ich so etwas wie benötigen:RewriteCond und rewriteRule zum Umleiten in Abhängigkeit von der Domäne

  • example.com -> example.com/en
  • example.ru -> example.ru/ru
  • Beispiel .fr -> example.fr/fr

ich einige Regeln in .htaccess definiert, aber sie tun nicht, was ich erwartet hatte:

# Rewrite --- http://www.example.com => http://www.example.com/en 
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] 
RewriteRule ^$ /en? [L,R=301] 

# Rewrite --- http://www.example.ru => http://www.example.ru/ru 
RewriteCond %{HTTP_HOST} !^www\.example\.ru [NC] 
RewriteRule ^$ /ru? [L,R=301] 

Statt example.com zu example.com/en und example.ru zu example.ru/ru zu ändern, hängt es an alle Domänen /en an. Ist es etwas, was ich vermisse?

Jeder Rat wäre sehr hilfreich.

+0

Passt '/ lang' immer (außer' en') zur Toplevel-Domain? –

+0

Ja, es ist das erste, was in jeder URL direkt nach der Domain erscheint. –

Antwort

2

sollte diese Arbeit:

# Rewrite --- http://www.example.com => http://www.example.com/en 
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC] 
RewriteCond %{REQUEST_URI} !^/en(/(.*)$|$) 
RewriteRule^/en%{REQUEST_URI} [L,R=301] 

# Rewrite --- http://www.example.ru => http://www.example.ru/ru 
RewriteCond %{HTTP_HOST} ^www\.example\.ru [NC] 
RewriteCond %{REQUEST_URI} !^/ru(/(.*)$|$) 
RewriteRule^/ru%{REQUEST_URI} [L,R=301] 

Sie ,R=301 entfernen können, wenn Sie die Rewrite für den Benutzer unsichtbar machen wollen.

+0

Ok, ich entdeckte, dass mein Problem hauptsächlich auf den DNS-Cache zurückzuführen war. Wie auch immer, ich werde deine Antwort akzeptieren, da sie funktioniert und nützliche Informationen liefert. –

+0

Eine Sache. Ich habe versucht, die R = 301 zu entfernen, aber dann hört es auf zu arbeiten. Die '/ lang' erscheint nicht in der URL und das CMS ändert nicht die Sprache für die Domain. –

+0

Nun, die URL wird erwartet, nicht zu ändern (Apache wird interne Umleitung), aber ich nicht, warum cms ändert nicht die Sprache (Ich kann das nicht testen, aber auf meinem Rechner kann ich bestätigen, dass es auf richtigen landet '/lang/... 'uri) –

1

können Sie diese Regeln verwenden:

RewriteEngine on 
# example.com to example.com/en 
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ 
RewriteRule ^((?!en).*)$ /en/$1 [L,R] 
# example.ru|fr to example.com/ru|fr 
RewriteCond %{HTTP_HOST} ^(?:www\.)?.+\.(ru|fr)$ 
RewriteRule ^((?!ru|fr).*)$ /%1/$1 [L,R] 

einfach die "example.com" ersetzen durch "youdomain.com" in der ersten RewriteCondition.