FireWizzy: Rekursives RewriteRule und Problem mit CSS und Grafiken

Hallo alles zusammen!

Ich sitze hier vor einem kleinen Problem. Und zwar möchte ich auf meiner Seite ähnlich dem System von MediaWiki den Content wählen.

Die URL dazu sieht momentan so aus:
http://localhost/index.php?content=meininhalt&param1=value1&param2=value3&...

Die Anzahl der Parameter ist nicht definiert und muss auf unendliche viele Parameter funktionieren.

Daher habe ich mir folgendes vorgestellt (am obigen Beispiel):

http://localhost/page/meininhalt/param1/value1/param2/value2/...

Bisher habe ich folgendes probiert:
RewriteEngine On
RewriteBase /var/www/
RewriteRule ^page/(.*)$ index.php?content=$1 [PT,L,QSA]

Natürlich fehlt mir noch das weiterleiten der Parameter. Als ich allerdings damit angefangen haben, stieß ich auf das Problem, dass externe Inhalte nicht angezeigt wurde, das Problem ist mir auch klar und soweit logisch. Einen absoluten Pfad kann ich allerdings nicht verwenden, da die Dateien im Rootverzeichnis (ohne mod_rewrite) die Inhalte auch teilweise verwenden und ich außerdem sicher bin, dass es auch eine sauberere Lösung gibt.

Kann man mein Vorhaben überhaupt realisieren und falls ja, kann mir jemand unter die Arme greifen? Bisher habe ich immer nur einfache Dinge gemacht, aber keine komplette Optimierung der Links

Vielen Dank
Fire Wizzy

  1. hi,

    ... kann mir jemand unter die Arme greifen? Bisher habe ich immer nur einfache Dinge gemacht, aber keine komplette Optimierung der Links

    URLs mit Parametern sind OK. Wenn Du was optimieren willst, tu was zum Last-Modified-Management oder Etag, also optimiere das Cacheverhalten. Und überhaupt: Die Vergabe der Namen für einen URL hat in der Projektverwaltung zu erfolgen und nicht in der Serverkonfiguration.

    Hotti

  2. Hi!

    http://localhost/index.php?content=meininhalt&param1=value1&param2=value3&...
    Die Anzahl der Parameter ist nicht definiert und muss auf unendliche viele Parameter funktionieren.

    Eine RewriteRule kennt aber keine Möglichkeit des "usw.".

    http://localhost/page/meininhalt/param1/value1/param2/value2/...

    Werte im Programm die REQUEST_URI aus und extrahiere die Parameter aus ihr händisch.

    Eine RewriteRule brauchst du trotzdem, weil du alles (.*) mit Ausnahme von existierenden Verzeichnissen und Dateien ist (= 2x RewriteCond) nach index.php mit angehängtem $1 umleiten willst. Und die Auswertung wie gesagt im Programm erledigen.

    Lo!

    1. hi,

      Werte im Programm die REQUEST_URI aus und extrahiere die Parameter aus ihr händisch.

      Genau!

      Eine RewriteRule brauchst du trotzdem, weil du alles (.*) mit Ausnahme von existierenden Verzeichnissen und Dateien ist (= 2x RewriteCond) nach index.php mit angehängtem $1 umleiten willst. Und die Auswertung wie gesagt im Programm erledigen.

      Ich würde sagen: Eine einzige Regel genügt. Z.B. mit der Festlegung, dass alles, was auf .html endet auf das Programm umgeschossen wird. Das ermittelt dann die Parameter, die es braucht, um den Content aus irgendwelchen Datentöpfen zu holen. Umgekehrt muss das "Programm" auch aus seinen internen Parametern einen Link darstellen können, was kein Problem ist, wenn da obendrüber eine ordentliche Projektverwaltung steht.

      Hotti

      1. Hi!

        Ich würde sagen: Eine einzige Regel genügt. Z.B. mit der Festlegung, dass alles, was auf .html endet auf das Programm umgeschossen wird.

        Dazu braucht es die Rewrite-Maschinerie nicht, denn Endungen oder einzelne Dateien auf PHP zu mappen geht einfacher. Der Rest wäre dann PathInfo. Aber das steht ja hier nicht zur Debatte, die URL soll keine Dateiendungen enthalten.

        Lo!

        1. hi,

          ... die URL soll keine Dateiendungen enthalten.

          Ja, gut. Dann muss es einen DirectoryIndex geben ;-)

          Hotti

          --
          Kakao finde ich gut.
    2. Hi!

      http://localhost/index.php?content=meininhalt&param1=value1&param2=value3&...
      Die Anzahl der Parameter ist nicht definiert und muss auf unendliche viele Parameter funktionieren.

      Eine RewriteRule kennt aber keine Möglichkeit des "usw.".

      http://localhost/page/meininhalt/param1/value1/param2/value2/...

      Werte im Programm die REQUEST_URI aus und extrahiere die Parameter aus ihr händisch.

      Eine RewriteRule brauchst du trotzdem, weil du alles (.*) mit Ausnahme von existierenden Verzeichnissen und Dateien ist (= 2x RewriteCond) nach index.php mit angehängtem $1 umleiten willst. Und die Auswertung wie gesagt im Programm erledigen.

      Lo!

      Das es nicht möglicht ist habe ich fast vermutet und die Idee, die URL mit der Aufgerufenen Seite zu parsen hatte ich auch, nur wollte ich vorher auf Nummer sicher gehen.

      Danke jedenfalls für deinen Beitrag.

      Kann mir dann aber villeicht jemand sagen, wie ich das nun machen muss, damit die externen Inhalte (CSS, JS, etc.) geunden werden.

      Mommentan steht auf der Seite eine Grafik, welche unter /external/image/jpg1.jpg liegt

      im HTML steht also
      <img src="external/image/jpg1.jpg" />

      bei meiner obigen Regel würde der Client nun folgende Dateien anfordern
      game/meincontent/external/image/jpg1.jpg

      Nun müsste ich also alle Anfragen welche folgenden Muster entsprechen wieder zurückbiegen.

      /external/

      Kann mir jemand sagen wie ich das anstellen kann?

      1. Hi!

        Bitte sinnvoll zitieren und nicht einfach alles. Außerdem wäre es nett, wenn du bei einem Nick bliebest. Danke.

        Kann mir dann aber villeicht jemand sagen, wie ich das nun machen muss, damit die externen Inhalte (CSS, JS, etc.) geunden werden.
        Mommentan steht auf der Seite eine Grafik, welche unter /external/image/jpg1.jpg liegt

        Da ein Browser nicht wissen kann, was an einer URL ein echter Pfadbestandteil und was gefaket ist, musst du entweder die Länge des Pfades des aktuellen Dokuments berücksichtigen und entsprechend viele ../ einbauen, was aber sehr aufwendig ist, oder absolute Verweise relativ zum DocumentRoot verwenden. Behilflich kann http://de.selfhtml.org/html/kopfdaten/basis.htm@title=base sein, das relative Verweise mit einer Basis-URL verknüpft. Aber das hat auch Nachteile. Beispielsweise wenn diese Angabe fest in viele Dokumente geschrieben wurde und der Webauftritt umzieht oder auch lokal getestet werden soll.

        Lo!