Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Automatische Sprachwahl per .htaccess - Problem

Hier können Sie Ihre Fragen zum Thema Suchmaschinenoptimierung (SEO) / Positionierung stellen
Neues Thema Antworten
Clinique
PostRank 2
PostRank 2
Beiträge: 43
Registriert: 19.05.2008, 10:21

Beitrag von Clinique » 11.12.2008, 08:17

Moin!

Ich will auf einer meiner Seiten eine automatische Sprach-Weiterleitung auf die sprachlich passende index.html machen.
Dafür habe ich folgendes in die .htaccess eingefügt, lande aber trotz meiner 'de' Sprachkennung immer auf der 'en'-Seite...
Weiß jemand eine Lösung?

Code: Alles auswählen

Options +FollowSymLinks
RewriteEngine On


RewriteCond %{HTTP:Accept-Language}^.*de.*$ [NC] 
RewriteRule ^(.*)$ http://www.domain.eu/de/$1  [L,R=301]

RewriteCond %{HTTP:Accept-Language} ^.*fr.*$ [NC]
RewriteRule ^(.*)$ http://www.domain.eu/$1  [L,R=301]

RewriteCond %{HTTP:Accept-Language} ^.*it.*$ [NC]
RewriteRule ^(.*)$ http://www.domain.eu/it/$1  [L,R=301]

RewriteCond %{HTTP:Accept-Language} ^.*es.*$ [NC]
RewriteRule ^(.*)$ http://www.domain.eu/es/$1  [L,R=301]

RewriteCond %{HTTP:Accept-Language} ^.*en.*$ [NC]
RewriteRule ^(.*)$ http://www.domain.eu/en/$1  [L,R=301]


RewriteRule !^de|en|fr|it|es/ /de%{REQUEST_URI} [L]
In den jeweiligen Ordnern habe ich eine .htaccess mit

Code: Alles auswählen

RewriteEngine Off
Die Hauptseite ist französisch, also nicht über die Regel wundern...

Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 11.12.2008, 13:48

Clinique hat geschrieben:Ich will auf einer meiner Seiten eine automatische Sprach-Weiterleitung auf die sprachlich passende index.html machen.
[…]
RewriteCond %{HTTP:Accept-Language}^.*de.*$ [NC]
RewriteRule ^(.*)$ https://www.domain.eu/de/$1 [L,R=301]
Accept-Language kann mehrere Sprachen umfassen, jeweils mit einer Priorisierung. Mit deinem Muster erreichst du bestenfalls, dass ein Franzose, der neben Französisch auch Deutsch akzeptiert, die deutsche Seite angezeigt bekommt, obwohl er mit seiner Muttersprache zweifelsohne besser bedient wäre.
Du solltest die Auswahl lieber dem Apache überlassen, der hat die Funktion nämlich schon eingebaut, vollständig, standardkonform und vor allen Dingen schön leicht zu nutzen:

In /.htaccess benötigst du nur eine Zeile, Options +multiviews, um das verantwortliche Modul mod_negotiation einzuschalten. Beim Aufruf einer Datei, die nicht existiert (Beispiel: x.html), sucht der Apache daraufhin sämtliche Dateien, die mit dem angefragten Namen beginnen (x.html.de, x.html.fr, x.html.html etc), weist Eigenschaften entsprechend der Dateiendungen zu (.html.de -> HTML, Deutsch) und liefert abschließend den Inhalt der nach Besucherwunsch passendsten aus.
Anzumerken ist, dass es sich nicht um eine Weiterleitung handelt, der Besucher sieht also weiterhin die angefragte URL x.html in der Adressleiste stehen, obwohl er x.html.de angezeigt bekommt.

Es gibt mehrere Möglichkeiten, diese Funktionalität zu nutzen. Die Apache-Doku selbst hat sämtliche Seiten unter einer allgemeinen URL stehen (Beispiel: https://httpsd.apache.org/docs/2.2/configuring.html), dort wird nach obigem Schema die jeweils passende Sprache ausgeliefert. Rechts oben auf jeder Seite befinden sich zusätzlich direkte Verweise auf die Übersetzungen (https://httpsd.apache.org/docs/2.2/de/configuring.html, https://httpsd.apache.org/docs/2.2/en/configuring.html, etc), damit der Besucher trotzdem noch die Möglichkeit hat, zwischen den Sprachen zu wechseln, etwa um das englische Original statt einer Übersetzung zu lesen.
Die Übersetzungen sind hier zusätzlich in separaten Verzeichnissen gelagert, man könnte aber auch auf die von mod_negotiation genutzen „Auswahldateien“ im gleichen Verzeichnis verweisen (https://httpsd.apache.org/docs/2.2/configuring.html.de, https://httpsd.apache.org/docs/2.2/configuring.html.en, etc).

Was ich dir raten täte:
Lege für jede Sprache eine Datei /index.html.xy an (/index.html.fr, /index.html.de), zusätzlich erstelle eine Standarddatei /index.html.html (ja, doppeltes .html). Letztere wird ausgeliefert, wenn keine der anderen Auswahlmöglichkeiten passt (Besucher spricht nur Suaheli …); IMHO solltest du hier nicht Französisch, sondern Englisch wählen - es können nunmal mehr Menschen Englisch als Französisch, und die Franzosen bekommen ihre Seite ja automatisch geliefert dank explizit definiertem index.html.fr. Andererseits wird dies die Sprache sein, die Google beim Aufruf von / zu sehen bekommt, während die eigentliche Hauptsprache Französisch erst über einen weiteren Verweis erreichbar ist. Abwägungssache.

Die .html.html-Geschichte, also eine Standardsprache, lässt sich im Apache 2 auch mittels ForceLanguagePriority / LanguagePriority realisieren.
Du benennst dann alle Dateien, auch die Standarddatei, mit ihren jeweiligen Sprachen, legst mit LanguagePriority fr die Bevorzugung von Französisch fest und sorgst mit ForceLanguagePriority Prefer|Fallback dafür, dass, falls gar nichts passt (der Fall fallback), die erste bei LanguagePriority genannte Sprache ausgeliefert wird.

In den index.html-Teilen befinden sich die normalen Startseiten in den jeweiligen Sprachen. Beachte, dass der Aufruf immer über die Basis-URL erfolgen muss, um die Automatik zu aktivieren: /index.html.xy wird über / aufgerufen (mithin /index.html, da / -> index.html die übliche Vorgabe für DirectoryIndex ist), schreibe <a href="/"> in den HTML-Code. Benutze <a href="/index.html.xy"> nur dann, wenn du ausdrücklich die Sprache .xy anzeigen lassen willst!

Auf den jeweiligen Startseiten verweist du einerseits in die jeweiligen Unterverzeichnisse, du solltest aber auch die anderen Sprachen zur Auswahl anbieten, schon alleine, um Suchmaschinen dorthin zu führen. Richte also, so wie in der Apache-Doku auch, Verweise zu den anderen index.html.xy ein (diese sprichst du dann auch direkt mit index.html.xy an, etwa <a href="/index.html.de">Deutsch</a>).

Es gibt, wie gesagt, noch weitere Möglichkeiten. Welche nun konkret zum Einsatz kommt, hängt vom Projekt ab, aber der oben angesprochene Weg scheint mir im Moment der sinnvollste.
Zuletzt geändert von Mork vom Ork am 11.12.2008, 16:03, insgesamt 1-mal geändert.

Clinique
PostRank 2
PostRank 2
Beiträge: 43
Registriert: 19.05.2008, 10:21

Beitrag von Clinique » 11.12.2008, 13:54

Wow! Respekt!

Du hast gerade einen Post für die Ewigkeit verfasst. Ich hab zu dem Thema nämlich nur halbgares Gestammel gefunden.

Vielen lieben Dank für deine Zeit und Mühe!

Clinique