PHP Snippet – Redirect bei mehrsprachigen Webseiten
Ein kurzer Schnipsel für eine HTTP-Weiterleitung mittels PHP am Beispiel einer mehrsprachigen Webseite.
Angenommen, wir haben eine mehrsprachige Webseite. Unter www.my-company.com ist der englische Inhalt zu finden und unter www.my-company.com/de/ der deutsche. Nun soll der Benutzer automatisch zur deutschen Seite weitergeleitet werden, wenn der Browser deutsch als bevorzugte Sprache mitsendet.
HTTP_ACCEPT_LANGUAGE
Diese Information ist in der Servervariable $_SERVER[‚HTTP_ACCEPT_LANGUAGE‘] gespeichert. Eine solche Liste der bevorzugten Sprachen, absteigend sortiert, könnte z.B. so aussehen:
["HTTP_ACCEPT_LANGUAGE"]=>"de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4"
Weiterleitung entsprechend der Länderkennung
Aus diesem String können wir nun mit PHP die Länderkennung auslesen und somit zur entsprechenden Sprachversion der Webseite weiterleiten.
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ if(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == "de") { header("location: http://www.my-company.com/de/"); } }
Setz dich. Nimm dir ’n Keks.
Jetzt wollen wir aber von der deutschen Seite auch wieder auf die englische Seite zurückwechseln können, z.B. über einen Link. Im Moment würden wir stets wieder zurück auf die deutsche Seite geleitet werden.
Um das zu verhindern, können wir z.B. ein Cookie setzen, über welches wir uns merken, dass die Weiterleitung bereits stattgefunden hat und dem Benutzer mit deutscher Länderkennung nun auch der Besuch der englischen Seite erlauben sein soll.
$cookieName = "redirected"; setcookie($cookieName, true, time() + (86400 * 30), "/"); // 1 Tag
Vorm Weiterleiten können wir nun prüfen, ob das Cookie bereits gesetzt wurde. Ist das nicht der Fall, soll es gesetzt werden und die Weiterleitung erfolgen.
if(!isset($_COOKIE[$cookieName])) { setcookie($cookieName, true, time() + (86400 * 30), "/"); // 1 Tag header("location: http://www.my-company.com/de/"); }
Alles zusammen
Zur Zusammenfassung noch mal der gesamte Codeschnipsel, wartend auf unsere Freunde Copy & Paste.
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ if(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == "de")) { $cookieName = "redirected"; if(!isset($_COOKIE[$cookieName])) { setcookie($cookieName, true, time() + (86400 * 30), "/"); // 1 Tag header("location: http://www.my-company.com/de/"); } } }
Ich hoffe wie immer, diese erstbeste Lösung war hilfreich.
Sie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen