• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

PHP und mod_rewrite eindeutige Namen im Mehrsprachenbetrieb

T

ToM80

Guest
Hallo zusammen,

leider bin ich über google nicht richtig fündig geworden.
Hat jemanden von Euch schonmal folgende Problemstellung bewältigt:

Seitenstruktur intern:
http://www.domain.tld/index.php?site=impress&lang=de
http://www.domain.tld/index.php?site=impress&lang=en

Seitenstruktur extern (soll):

http://www.domain.tld/impressum.php
http://en.domain.tld/impress.php

Ich denke, dass man hier mit einem Mix aus Apache mod_rewrite und PHP arbeiten muss. Ich habe aber derzeit keinen blassen Schimmer wie ich das ganze angehen kann.

Über Hilfe wäre ich dankbar.

Schönes Pfingstwochenende

ToM80
 
Soweit ok, aber wie würde es mit den verschiedenen Sprachversionen funktionieren?
Sprich Fremdspachen = Subdomain und Seitennamen in Landessprache.
 
Dagegen spricht die Eindeutigkeit der Seite in der Landessprache.
Die URL sehe ich eher für den menschlichen Nutzer, nicht den Suchroboter.

Deshalb möchte ich eindeutige Namen vergeben. Es wird auch nicht jede Sprache der Welt genutzt, sondern nur ein paar ausgewählte.

Impressum ist da vllt. ein schlechtes Beispiel. Nehmen wir deshalb z. B. die Seite "Fahrzeuge". "Fahrzeuge_en" macht hier wenig sinn, besser en.domain.tld/cars und domain.tld/fahrzeuge.

Später sollen dann noch weitere Sprachen hinzukommen.
Ich habe im Netz mal etwas gefunden was eine Mod_rewrite in der Basis nutzt und den Rest per PHP steuert, aber
a) war es eine grobe Beschreibung für eine Funkiton in einem CMS [wenn ich mich richtig erinnere]
b) finde ich die Seite nicht mehr

Trotzdem danke für deine Gedanken und Deine Hilfe.
 
Alternativ wäre auch
domain.tld/en/cars
ok
Ja, schön. Du brauchst mir die Möglichkeiten aber nicht auflisten :)
Du musst die Entscheidung selbst treffen.
Vor allen Dingen sollte sich die Entscheidung danach richten, was auf deinem Server möglich ist mit deinen Berechtigungen. Man darf ja nicht überall alles machen als Kunde.
Und wenn du dich entschieden hast und Probleme auftauchen, frag einfach hier wieder.
 
Ok, um es hier einfacher zu machen, ohne Subdomain. Hat jemand folgendes schonmal umgesetzt oder wüßte wie es geht:

Eingabe:
EXTERN => INTERN
domain.tld/start => domain.tld/index.php?site=index&lang=
domain.tld/en/home => domain.tld/index.php?site=index&lang=en

domain.tld/fahrzeuge => domain.tld/index.php?site=cars&lang=
domain.tld/en/cars => domain.tld/index.php?site=cars&lang=en

domain.tld/wir => domain.tld/index.php?site=aboutus&lang=
domain.tld/de/about => domain.tld/index.php?site=aboutus&lang=en

domain.tld/impressum => domain.tld/index.php?site=impress&lang=
domain.tld/de/impress => domain.tld/index.php?site=impress&lang=en

.
.
.

Das sind Die Umleitungen wie sie am Ende auf der Seite funktionieren sollen.

PS: Ist lang=="" wird lang="de" gesetzt
 
Mir geht es darum, das ich nicht für jede einzelne Seite ein HTACCESS Aufruf erstellen möchte, dass muss doch auch globaler mit Platzhaltern gehen.

Wenn ich Dein Bsp hier richtig verstehe, muss ich das aber machen, ich seh hier nix flexibles.

Versuch mal in der .htaccess folgende Zeile:
Code:
Redirect seeother /impressum/ http://www.domain.tld/index.php?site=impress&lang=de

Ich hoffe darauf, dass ich mit z. B. ein PHP-Array hernehmen kann mit den entsprechenden Seitennamen z. B.:
PHP:
$siteArr=array(
  "index"=>array(
     "de"=>array(
         "title"="Startseite",
         "name"="startseite"
     ),
     "en"=>array(
        "title"="Homepage",
        "name"="home"
     )
  ),
  "cars"=>array(
      "de"=>array("title="Fahrzeuge","name"="fahrzeuge"),"en"=>array("title"=Cars","name"="cars")
  )
);

und dieses mit den URL Rewrite verheiraten kann.
 
Mir geht es darum, das ich nicht für jede einzelne Seite ein HTACCESS Aufruf erstellen möchte, dass muss doch auch globaler mit Platzhaltern gehen.
Aha, das ist die Frage.
Ja, man kann hier auch mit Platzhaltern arbeiten, die weiß ich aber auch nicht auswendig.
Hast du die Apache Doku hierzu mal angeschaut? Sonst warten wir mal ob das jemand auswendig weiß.
Und mit PHP kann man die .htaccess ja auch einfach schreiben/erzeugen/aktualisieren. Da sehe ich keine Probleme.
Nur das mit der Array Struktur in PHP dürfte systemisch nicht klappen, weil der Apache das PHP ja immer erst nach der .htaccess ausführt. Du kannst die Ausführung des PHP nicht vorweg nehmen, weil die .htaccess ja übergreifende Richtlinien beinhaltet und daher immer VOR PHP gelesen wird.
 
Ich würde ja von mod_rewrite einfach alles, was nicht als Datei auf dem Server existiert in einen Parameter an die index.php senden.

Also domain.tld/nicht/existenter/pfad => domain.tld/index.php?path=nicht/existenter/pfad

In PHP kann ich diese path-Variable dann parsen, wie ich es will. Ich hab' sowas ähnliches auch schon gemacht.

@mikdoe: ich finde ja den Weg, für jeden möglichen Pfad eine eigene Regel aufzustellen, etwas mühselig und wenig wartungsfreundlich...
 
Man nutzt heute aber keine parameter mehr, wieso auch? In der Url steckt ja alles drin!
Einfch in der htaccess auf index.php weiterverlinken und dann im php per $_SERVER['REQUEST_URI'] darauf zugreifen. Per explode("/", $_SERVER["REQUEST_URI"]) hätte man es schon schön separiert, oder eben es gleich richtig machen, eine Routerklasse anlegen und in dieser dann per routen oder per regex auf die entsprechenden Module zeigen.

Lg Kasalop
 
Danke, so werde ich es machen. Arbeite ja eh schon mit der zentralen Indexdatei, aber alles in eine Variable zu packen ist natürlich noch besser :)
 
mod_rewrite und ich werden nie Freunde werden :)

Ich habe jetzt folgendes:

Code:
RewriteEngine on
RewriteBase /
RewriteRule (.*)$ index.php?param=$1 [QSA]

Was die Parameter angeht, funktioniert das auch so wie gewünscht. Das Problem: Meine ganze Ordnerstruktur wird nicht mehr erkannt, was zur Folge hat:
- keine Bilder
- kein Css
- kein JS
- ...

Kann mir hier nochmal jemand helfen?
 
Hat sich erleidigt, hilfreich war folgende Condition:

Code:
RewriteCond %{REQUEST_URI} !^(\/css|\/img|\/js) [NC]
 
Ich hab' das immer allgemeiner mit
Code:
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
gemacht - lässt alle Dateien und Ordner durch, die es wirklich gibt.
Vorteil: ist flexibler und deswegen weniger wartungsintensiv
Nachteil: ist flexibler und kann deswegen unerwartetes Verhalten produzieren (falls du mal aus versehen eine Datei erzeugst, die es eigentlich gar nicht geben soll/darf).
 
Zurück
Oben