thomas: mod_rewrite und verzeichnisstrukturen

Hallo!

Ich habe lange rumprobiert und gesucht, leider funktionierts noch nicht:

Ich habe eine index.php, welche mit Variablen (z.B. id=2&user=4&etc=67 usw.) gefüttert wird, um verschiedene Inhalte zu generieren und auszugeben. Nun will ich aber die datei nicht mit www.irgendwas.de/index.php?id=2&user=4&etc=67 aufrufen, sondern mit www.irgendwas.de/2/4/67/variable4/variable5. Was muss in meiner .htaccess stehen, um das so umzuschreiben. Die übergebenen Variablen brauche ich dann in meinen $_GET [...]. Bisher hab ich das Problem gelöst mit folgender .htaccess:

---------schnipp----------

RewriteEngine on
RewriteRule ^(.*).html$ /index.php?inhalt=$1 [L]

---------schnapp----------

Hier funktioniert nur eine Variable. Wie muss die .htaccess aussehen?

Danke für Eure Mühe.

Thomas

  1. Hallo thomas,

    [... Rewrite-Rule für bel. viele Verzeichnistiefen, die in
    GET-Parameter umgewandet werden sollen ...]
    Hier funktioniert nur eine Variable. Wie muss die .htaccess aussehen?

    Das geht nicht. Du kannst nur eine RewriteRule für endlich viele,
    vorher definierte Verzeichnis-Tiefen machen. Es gibt keine
    Schleifen oder so in mod_rewrite.

    Grüße,
     CK

    --
    Der Geist ist alles. Du wirst, was du denkst.
    1. Moin!

      [... Rewrite-Rule für bel. viele Verzeichnistiefen, die in
      GET-Parameter umgewandet werden sollen ...]
      Hier funktioniert nur eine Variable. Wie muss die .htaccess aussehen?

      Das geht nicht. Du kannst nur eine RewriteRule für endlich viele,
      vorher definierte Verzeichnis-Tiefen machen. Es gibt keine
      Schleifen oder so in mod_rewrite.

      Aber trotzdem ist nichts verloren. Man kann ^/(.*)$ in /index.php umschreiben lassen und erhält dann im Skript $_SERVER['REQUEST_URI']. Diese Variable enthält den ursprünglichen Request, und dann kann man im Programm mit Schleifen und sonstigem Zeugs den Pfad auseinandernehmen und entsprechend verzweigen.

      GET-Parameter, die am Original-Pfad dranhängen, landen wie gewohnt in $_GET. POST-Requests in $_POST.

      - Sven Rautenberg

      --
      "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
      1. hi,

        GET-Parameter, die am Original-Pfad dranhängen, landen wie gewohnt in $_GET.

        ist dafür nicht beim rewriten noch das flag [qsa] (query string append) erforderlich?

        gruss,
        wahsaga

        1. Moin!

          GET-Parameter, die am Original-Pfad dranhängen, landen wie gewohnt in $_GET.

          ist dafür nicht beim rewriten noch das flag [qsa] (query string append) erforderlich?

          Nein. Das ist nur erforderlich, wenn man durch Rewriting an GET was _ändern_ will.

          Rewriting an sich beschränkt sich nämlich normalerweise wirklich nur auf Pfad und Dateiname, und guckt den Query-String gar nicht an.

          - Sven Rautenberg

          --
          "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
          1. hi,

            Nein. Das ist nur erforderlich, wenn man durch Rewriting an GET was _ändern_ will.

            danke,
            das erscheint mir bei genauerem nachdenken auch logisch.

            Rewriting an sich beschränkt sich nämlich normalerweise wirklich nur auf Pfad und Dateiname, und guckt den Query-String gar nicht an.

            das war mir bekannt, hab da wohl irgendwie etwas durcheinander gebracht.

            gruss,
            wahsaga

      2. Das geht nicht. Du kannst nur eine RewriteRule für endlich viele,
        vorher definierte Verzeichnis-Tiefen machen.

        Wie muss so eine RewriteRule aussehen?

        Aber trotzdem ist nichts verloren. Man kann ^/(.*)$ in /index.php umschreiben lassen und erhält dann im Skript $_SERVER['REQUEST_URI']. Diese Variable enthält den ursprünglichen Request, und dann kann man im Programm mit Schleifen und sonstigem Zeugs den Pfad auseinandernehmen und entsprechend verzweigen.

        GET-Parameter, die am Original-Pfad dranhängen, landen wie gewohnt in $_GET. POST-Requests in $_POST.

        Meine .htaccess sieht nun so aus:

        ----------------------

        RewriteEngine on
        RewriteRule ^/(.*)$ /indextest.php

        ----------------------

        Funktioniert nicht. Ich könnte mich evtl. damit begnügen, die anzahl der Verteichnisse vorher zu definieren. Was muss ich schreiben? Wie funktioniert das beispielsweise bei diesem Forum?

        Danke für Eure Mühe.

        Thomas

        1. Hallo thomas,

          Das geht nicht. Du kannst nur eine RewriteRule für endlich
          viele, vorher definierte Verzeichnis-Tiefen machen.

          Wie muss so eine RewriteRule aussehen?

          RewriteRule ^/?([^/]+)/([^/]+) script.pl?a=$1&b=$2

          RewriteEngine on
          RewriteRule ^/(.*)$ /indextest.php

          Fehlt nur noch eine RewriteBase-Angabe.

          Wie funktioniert das beispielsweise bei diesem Forum?

          DirectoryIndex /cgi-bin/fo_view

          ;)

          Grüße,
           CK

          --
          Ich bewundere wirklich den Sinn der Bienen für kollektive Verantwortung. Obwohl sich einzelne Bienen hin und wieder bekämpfen, herrscht zwischen Ihnen grundsätzlich ein starkes Gefühl für Eintracht und Zusammenarbeit. Wir Menschen gelten als sehr viel weiter entwickelt, doch mitunter rangieren wir sogar hinter kleinen Insekten.
          1. RewriteRule ^/?([^/]+)/([^/]+) script.pl?a=$1&b=$2

            Danke für Deine Hilfe.

            Ich rue das skript www.irgendwas.de/indextest.php nun auf mit www.irgendwas.de/var1/var2. Nur krieg ich damit immernoch kein Ergebnis, d.h. Fehler 403, da das nachgefragte Verzeichnis logischerweise nicht exstiert.

            Wo liegt das Problem? Die RewriteRule

            RewriteRule ^(.*).html$ /index.php?inhalt=$1 [L]

            funktioniert auf dem selben Server ohne Probleme...

            Thomas