mehrsprachiges CMS

URLs umschreiben, umleiten, blocken oder sperren - all das und noch viel mehr kann mit mod_rewrite erreicht werden. Mit regulären Ausdrücken, Conditions und Rules stehst Du auf Kriegsfuss? mod_rewrite macht nicht das was Du willst, oder funktioniert gar nicht? hier bist Du richtig!

Moderatoren: Bob, Super-Mod

mehrsprachiges CMS

Beitragvon wrongspot » 12.08.2010 20:57

Hallo Forum,

ich bin gerade dabei ein CMS um mehrsprachigen Content zu erweitern. Da ich nicht der allergrößte Regular Expressionfreak bin, brauche ich Eure Hilfe. 3 Anforderungen die ich umsetzen möchte, aber nich weiß wie ich alle Regeln miteinander kombiniere.Folgender hierachischer Aufbau des CMS.

root
    de
      contact
      impressum
      news
      content
    en
    es


1. erste Anforderung, index.php soll aus der URL entfernt werden.

http://server/multilanguage-site/index.php/de/contact
http://server/multilanguage-site/de/contact

das habe ich soweit mit folgener Regel hinbekommen


Code: Alles auswählen
RewriteBase /multilanguage-site/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]


2. Anforderung wäre mir die gerade ausgewählte Sprache in einer Environment Variable zu merken. Jedesmal wenn in der url /en/ oder /es/ oder /de/ auftaucht soll mir mittels [E=MYLANGUAGE:$2] die gerade ausgewählte Sprache gespeichert werden, sodass ich sie später über $_SERVER['MYLANGUAGE'] abfragen kann.

3. Jetzt zu meinem größten Problem. Der Content an sich befindet sich im Hierachiebaum unter dem Zweig root/de/. Alle anderen Sprachzweige sind leer. wählt der User die URL

http://server/multilanguage-site/es/contact

würde er keinen Content angezeigt bekommen, weil ja dort nichts vorhanden ist. Wie bekomme ich hin, dass Apache intern

http://server/multilanguage-site/de/contact

anwählt, aber nach außen dem User im Browser die spanische URL anzeigt?

http://server/multilanguage-site/es/contact

Könnte mir da bitte jemand etwas Licht ins Dunkel bringen?
Vielen Dank
wrongspot
.
.
 
Beiträge: 3
Registriert: 10.08.2010 23:18

Re: mehrsprachiges CMS

Beitragvon wrongspot » 16.08.2010 15:25

okay, das was ich soweit habe funktioniert zum Teil.
Code: Alles auswählen
RewriteBase /multilanguage-site/

RewriteRule ^(en|ru)/(.*)$ /de/$2 [E=MYLANG:$1]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]


wähle ich die url http://server/multilanguage-site/en/ wird intern der pfad multilanguage-site/de gewählt, aber im Browser wird mir multilanguage-site/en angezeigt.

gehe ich aber eine Ebene tiefer und wähle http://server/multilanguage-site/en/impressum dann wird mir die seite intern nicht umgeschrieben. Ich nehme an die RewriteRule mit (en|ru) ist noch nicht korrekt. Außerdem wird mir auch noch nicht in die Servervariable ('MYLANG') gesetzt, die ist nach wie vor leer.

Ich versuch mich da langsam heran zu beißen.
wrongspot
.
.
 
Beiträge: 3
Registriert: 10.08.2010 23:18

Re: mehrsprachiges CMS

Beitragvon wrongspot » 16.08.2010 19:24

dann beantworte ich meine Frage selbst. Folgende Rewrite Rules bringen das erwünschte Ergebnis
Code: Alles auswählen
RewriteEngine On
RewriteBase /multilanguage-site/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(de|en|ru|es)/(.*)$ index.php/de/$2 [E=MYLANG:$1,L]


Die Servervariable wird auch entsprechend gesetzt, nur ist sie mit $_SERVER['REDIRECT_MYLANG'] auszulesen.
wrongspot
.
.
 
Beiträge: 3
Registriert: 10.08.2010 23:18


Zurück zu mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste