Sebastian Salzgeber: mod_rewrite: Dynamisch Pfade umwandeln

Hallo zusammen

MEine Frage geht dahin, dass ich gerne wissen würde, wie ich die htaccess schreiben muss, damit ich eine dynamische umwandlung von Pfadangaben zu parametern bekomme.

Bisher benutze ich dies hier:

  
	RewriteRule ^/?$ index.php?pMain=index [L]  
	RewriteRule ^([^/\.]+)/?$ index.php?pEnd=$1 [L]  
	RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?p1=$1&pEnd=$2 [L]  
	RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?p1=$1&p2=$2&pEnd=$3 [L]  
	RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?p1=$1&p2=$2&p3=$3&pEnd=$4 [L]  
	RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&pEnd=$5 [L]  

Damit bekomme ich folgende übersetzung hin:

  
example.com/eins/zwei/ => /index.php?p1=eins&pEnd=zwei  
example.com/eins/zwei/drei/ => /index.php?p1=eins&p2=zwei&pEnd=drei  
...  

Wie ihr seht, habe ich dies für 4 unterebenen angelegt, weswgeen sich die regexp auch so oft wiederholt und es mir möglich war, den letzetn parameter immer pEnd zu nennen.

Ich würde aber gerne wissen, ob ich den Pfad nicht auch mit einer einzigen RewriteRule umschreiben könnte; Ich also jetzt nicht diese Zeile quasi 20x widerholen muss, nur um auch in der 20. Ebene noch eine umleitung zu bekommen. Das ist ja doch sehr manuell was ich da gemacht habe.

Ich weiss dass einige Model View Controller, auf diese Weise, die Pfade zum laden der Module in PHP extrahieren. Aber geht da snicht auch in der .htaccess-Datei?

Was ich letzlich haben möchte ist:

  
example.com/eins/zwei/ => /index.php?p1=eins&p2=zwei    //Was aktuell ja quasi schon manuell geht  
example.com/eins/zwei/drei/hund/katze/maus/ => /index.php?p1=eins&p1=zwei&p3=drei&p4=hund&p5=katze&p6=maus  
...  

Schönen Sonntag
Sebastian S.

  1. hi,

    MEine Frage geht dahin, dass ich gerne wissen würde, wie ich die htaccess schreiben muss, damit ich eine dynamische umwandlung von Pfadangaben zu parametern bekomme.

    Meine Gegenfrage geht dahin, zu wissen, ob für Dich auch _eine_ Regel für _alle_ Dateien mit _einer_ einheitlichen Dateierweiterung (z.B. .html) reichen würde?

    Sag ja und ich schreib Dir die Regel auf ;-)

    Hotti

    1. Sag ja und ich schreib Dir die Regel auf ;-)

      Ich sage ja

      (vielleicht kann ich sie ja selber noch tweaken mehrere Dateiendungen zu behandeln :)

      Grüße
      Sebastian S.

      1. hi,

        Sag ja und ich schreib Dir die Regel auf ;-)

        Ich sage ja

        RewriteEngine on
        RewriteRule ^(.*).html$    /script.php?path=$1

        oder ohne Klammer
        RewriteRule ^.*.html$    /script.php

        V1 hat den Vorteil, Du hast den path gleich als Parameter. In v2 musst Du den kompletten REQUEST_URI auseinandernehmen (in script.php). In beiden Varianten gehen _alle_ Requests like

        http://example.com/index.html
        http://example.com/dir/index.html
        http://example.com/dir/subdir/index.html
                          ^REQUEST_URI ab hier

        auf das Script script.php, was die Pfade ermittelt und die Inhalte ausliefert.

        (vielleicht kann ich sie ja selber noch tweaken mehrere Dateiendungen zu behandeln :)

        Entweder globben (.htm*) oder je .ext eine eigene Regel.

        Hotti

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
        1. Hotti

          Dank dir. Ich habe es jetzt genauso gemacht und werde in PHP REQUEST_URI nach meinen Bedürfnissen zershcneiden. Scheint auch nicht so fehleranfällig zu sein, da man diverse exceptions direkt abfangen kann.

          Grüße
          Sebastian S.