Moin!
Ich habe jetzt ein bißchen gegoogled und bin auf HTTP_ACCEPT_LANGUAGE gestoßen. Wenn ich mir diese Variable auf meinem Webspace ausgeben lasse, bekomme ich folgende Meldung:
de-at, de;q=0.75, en-us;q=0.50, en;q=0.25
Da kommt jetzt sowohl de-at, als auch en-us vor. Wie kann ich nun unterscheiden was das Richtige ist?
Diese Angabe solltest du in der Tat verwenden - auf deiner neuen Startseite.
Ansonsten finde ich die Methode mit der RewriteRule sehr spannend.
Ich denke, du hast zunächst folgendes Problem: Deine jetzige Seite ist schon einigermaßen bekannt, von vielen Seiten wurden Links gesetzt. Und ich würde die URL-Struktur deiner Seite _niemals_ ändern. Zumindest die URLs _niemals_ mehr ändern. Du hast mit mod_rewrite oder auch mod_alias die Möglichkeit, alle alten URLs (die weiterhin gültig bleiben) auf deine neue Seitenstruktur umzubiegen. Aber das ist eigentlich gar nicht notwendig.
Idee: Du läßt alles so, wie es ist. Alle Anfragen an deine bisherigen Seiten sollen als Antwort "deutsch" haben - oder vielleicht die laut Browser (siehe oben) gewünschte bevorzugte Sprache. Außerdem schaffst du eine neue Startseite, die die Leute per Link zu zwei weiteren Startseiten bringt: /de/index.html und /en/index.html. Deine deutschen Seiten sind also im URL-Verzeichnis /de/, die englischen in /en/. Alle Links in deinem Projekt sollten relativ sein, d.h. sie funktionieren im Unterverzeichnis genausogut wie im Hauptverzeichnis. Und mit mod_rewrite schreibst du diese URLs so um, dass sie das /de/ oder /en/ vorne verlieren und wieder auf deiner bestehenden Struktur landen. Also: aus "/de/thema/seite.html" wird "/thema/seite.html". Wenn du dynamische Seiten auslieferst, und mit mod_rewrite keinen Redirect ausführst, sondern nur intern die URL umschreibst, kannst du die Original-URL in den Server-Variablen nachschauen und aufgrund von /de/ oder /en/ reagieren.
Zum Sprachwechsel setzt du noch einen Link, der explizit auf die Index-Seite der jeweils anderen Sprache verweist.
Jetzt stellt sich natürlich die Frage, wie ich von vornherein weis, ob ich /en/news.html oder /de/news.html gewählt habe, und das weis ich eben nur, wenn ich die Parameter irgendwie übergebe, was irgendwie auch die Ganze Zeit mein Problem ist =), aber ich glaube da gibt es doch irgendetwas, wo man mit .htaccess die Sprache aus den Umgebungsvariablen herausfinden kann, oder nicht?
Die Information, in welchem Verzeichnis du bist, reicht als "Parameter" doch vollkommen aus, oder? Wenn du es unbedingt willst, kannst du mit mod_rewrite aus dem URL-Bestandteil auch gerne einen Parameter machen.
Ungefähr so
RewriteRule ^/(.{2})/(.*)$ /$2?lang=$1
Bitteschön, ein zweibuchstabiges Verzeichnis am Anfang der URL wird in den Parameter "lang" am Ende verschoben.
Lies den RewriteGuide zu mod_rewrite, dann kriegst du gute Ideen: http://httpd.apache.org/docs/misc/rewriteguide.html
mod_alias: http://httpd.apache.org/docs/mod/mod_alias.html
mod_rewrite: http://httpd.apache.org/docs/mod/mod_rewrite.html
- Sven Rautenberg
Diese Signatur gilt nur am Freitag.