Zur Navigation

Browsersprache erkennen und sofort umleiten?

1 Horst_Braun

Hallo,

ich habe eine Domain in 2 Sprachen domain.com/de/ und domain/en/

Ich möchte, dass die Browsersprache erkannt wird und automatische Umleitung. Ist das möglich?

Ich hab das so gemacht:
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ /de [L,R]

RewriteCond %{HTTP:Accept-Language} (aa|ab|af|am|ar|as|ay|az|ba|be|bg|bh|bi|bn|bo|br|ca|co|cs|cy|da|dz|el|en|eo|es|et|eu|fa|fi|fj|fo|fr|fy|ga|gd|gl|gn|gu|ha|hi|hr|hu|hy|ia|ie|ik|in|is|it|iw|ja|ji|jw|ka|kk|kl|km|kn|ko|ks|ku|ky|la|ln|lo|lt|lv|mg|mi|mk|ml|mn|mo|mr|ms|mt|my|na|ne|nl|no|oc|om|or|pa|pl|ps|pt|qu|rm|rn|ro|ru|rw|sa|sd|sg|sh|si|sk|sl|sm|sn|so|sq|sr|ss|st|su|sv|sw|ta|te|tg|th|ti|tk|tl|tn|to|tr|ts|tt|tw|uk|ur|uz|vi|vo|wo|xh|yo|zh|zu) [NC]
RewriteRule ^$ /en  [L,R]

Ist das so korrekt? Kommen Suchmaschinen damit zurecht?

01.06.2011 20:14 | geändert: 01.06.2011 20:44

2 Jörg Kruse

Das sollte funktionieren. Das kannst du auch selbst testen, indem du die Spracheinstellung in deinem Browser temporär verstellst - in den Firefox-Einstellungen beispielsweise unter Inhalt -> Sprachen.

Kommen Suchmaschinen damit zurecht?

Die Bots von Google und Bing senden meinen Tests zufolge keinen Accept-Language-Header, bleiben demzufolge auf der Startsete hängen. Der Yahoo-Bot sendet folgende Angabe und wird demzufolge immer auf die englische Version weitergeleitet:

en-us,en;q=0.5

Wenn du wirklich alle Besucher von der Startseite weiterleiten möchtest, würde ich die zweite RewriteCond eher so formulieren:

RewriteCond %{HTTP:Accept-Language} !^de [NC]

Das beträfe dann alle Browser / Bots, die keinen Accept-Language-Header senden, der mit "de" beginnt

Ich würde auf jeden Fall noch die Sprachversionen mit Flaggenlinks untereinander einander verlinken, so dass Besucher auch die Sprache wechseln können und die Suchmaschinen beide Versionen indizieren

01.06.2011 22:22 | geändert: 01.06.2011 22:24

3 Horst_Braun

Ok. Funktioniert top. Die Flaggen (/de/ bzw /en/) hab ich auch drin.

Somit existiert www.domain.com eigentlich überhaupt nicht, sondern nur www.domain.com/de/ bzw. www.domain.com/en/

Macht das suchmaschinentechnisch Sinn? Wenn jemand auf die Seite verlinkt, dann sicherlich dich immer www.domain.com

01.06.2011 22:33

4 Jörg Kruse

Wenn jemand auf die Seite verlinkt, dann sicherlich dich immer www.domain.com

Diese Links ordnen die Suchmaschinen dann wohl alle der englischsprachigen Version zu, da sie dorthin weitergeleitet werden. Also auch die Links mit deutschsprachigem Linktext.

01.06.2011 22:43

5 Horst_Braun

Was ja gar nicht schlecht sein muss.

01.06.2011 22:53

... 6 Jahre und 7 Monate später ...

6 nono (Gast)

Hi Jörg,

ich konnte eurer Skrpt verwenden.
RewriteEngine on
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ /de [L,R]

Ich habe zwei Domains für einen Webspace und nun den Effekt, das von der .eu-Domain die Weiterleitung funktioniert, aber von der .com-Domain die Weiterleitung nicht funktioniert, weil der Link geändert wird.

Aus
/de/#xl_xr_page_index
wird
/de/%23xl_xr_page_index

Hast Du einen Tipp für mich, wie ich das abstellen kann?

Vielen Dank und viele Grüße
nono

12.01.2018 10:33

7 Jörg Kruse

/de/#xl_xr_page_index

Wie rufst du diese URL auf? den Anker #xl_xr_page_index sollte ein Browser eigentlich für sich behalten und nicht im Request an den Server mitsenden.

12.01.2018 11:07

8 nono (Gast)

Hi Jörg,

Die URL habe ich aus der Adresszeile des Browsers:
www.domain.com/de/%23xl_xr_page_index (funktioniert nicht)
www.domain.eu/de/#xl_xr_page_index (funktioniert)

Viele Grüße
nono

12.01.2018 12:21

9 Jörg Kruse

Ja, schon klar - aber wie erhält der Webserver diese URL? ein Browser wie Firefox oder Google Chrome wird den Anker #xl_xr_page_index im Request nicht mitsenden. Das tun eigentlich nur defekte Bots.

Beispiel diese URL:

https://joergs-forum.de/browsersprache-erkennen-und-sofort-umleiten-t-3983-1#p8

In dem Request an den Server steht dann so etwas:

GET /browsersprache-erkennen-und-sofort-umleiten-t-3983-1 HTTP/1.1

Das #8 taucht in der Abfrage nicht mit auf! den Anker benötigt der Browser erst nach dem Request, nachdem die Seite aufgebaut ist, um zu wissen, wohin er springen muss.

Wenn ein (defekter) Bot den Anker im Request noch mit dran hängt, dann hält der Webserver diesen für einen Teil des Pfades. Entsprechend wird bei einer Weiterleitung das # in %23 kodiert. Der Webserver verhält sich in so einem Fall also durchaus korrekt.

12.01.2018 12:49

10 nono (Gast)

Hi Jörg,

ich bin Laie.

Das Problem ist aus deiner Sicht das Gatterzeichen # (Anker)?

Viele Grüße
nono

12.01.2018 12:56