-xXx-: .htacces mit GET-Variablen

Hallo!

Ich habe ein kleines Problem mit .htaccess (genauer gesagt mit mod_rewrite)
Ich habe folgende .htaccess Datei erstellt:

RewriteEngine On
RewriteRule ^([^/]*).html$ /?p=$1 [L]
RewriteCond %{HTTP_HOST} ^example.org$ [NC]
RewriteRule ^(.*)$ http://www.example.org/$1 [R=301,L]

In dieser .htaccess wird index.php?p=home nach /home.html verwiesen.

Das funktioniert alles auch soweit.
Doch leider werden jetzt keine anderen Get-Variablen übermittelt (also z.B. index.php?p=home&a=5). Wenn ich die Variablen ausgeben will, kommt immer nichts (also die Variable ist leer).
Theoretisch müsste ich ja jetzt das, was in der .htaccess steht für jede Variable einmal machen (bzw. so ähnlich), aber das ist irgendwie nicht wirklich sauber und bei mehreren Get-Variablen wird das dann auch schonmal leicht unübersichtlich.
Hat jemand eine Idee, wie ich das lösen kann, dass auch die Get-Variablen übermittelt werden?
Habe schon gegoogelt aber nichts wirklich passendes gefunden.

-xXx-

  1. RewriteEngine On
    RewriteRule ^([^/]*).html$ /?p=$1 [L]

    bekommst du /index.html so leitet die nach /?p$1
    Nur was ist in /   ???

    Mache es explizit:

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

    QSA löst auch dein Problem mit dem Querystring.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Danke, das war es. Hab es jetzt hin bekommen. Dankeschön ;)

  2. h1,

    Hat jemand eine Idee, wie ich das lösen kann, dass auch die Get-Variablen übermittelt werden?

    Grundsätzlich werden alle Parameter übermittelt, egal ob das GET oder POST ist. Es kommt jedoch darauf an, wie diese Parameter geparst werden, d.h., auf was sich der Parser bezieht.

    RewriteRule QUELLE?q=1 ZIEL?z=1

    Bezieht sich der Parser auf die QUELLE, das ist der REQUEST_URI, kann er nur die Parameter lesen, die dem REQUEST_URI mitgegeben wurden, in dem Fall q. Hierbei sind auch Parameter möglich, die nicht in der Rule definiert sind, also auch Parameter, die der UA dem Request mitgegeben hat.

    Bezieht sich der Parser auf das ZIEL, kann er nur die Parameter ermitteln, die in der Rule dem Ziel mitgegeben wurden, in dem Fall z.

    Hotti

    1. Hi!

      Grundsätzlich werden alle Parameter übermittelt, egal ob das GET oder POST ist. Es kommt jedoch darauf an, wie diese Parameter geparst werden, d.h., auf was sich der Parser bezieht.

      Was genau meinst du damit eigentlich? Von wo nach wo werden die Parameter übermittelt und an wessen Parser dachtest du hier?

      RewriteRule QUELLE?q=1 ZIEL?z=1

      Grundsätzlich interessiert sich eine RewriteRule beim Auswerten nicht für den Querystring. Das kann man nur in einer RewriteCond machen, wenn man das vorhat. Wenn man sie allerdings wie in diesem Fall nur unbeachtet durchreichen will, kann das schon erwähnte QSA-Flag helfen.

      Lo!

      1. h1,

        Grundsätzlich interessiert sich eine RewriteRule beim Auswerten nicht für den Querystring. Das kann man nur in einer RewriteCond machen, wenn man das vorhat. Wenn man sie allerdings wie in diesem Fall nur unbeachtet durchreichen will, kann das schon erwähnte QSA-Flag helfen.

        So!? Damit Du mir folgen kannst, maln bischen ausführlicher. Gegeben sei

        RewriteRule ^cgi-bin/.*forum.cgi   /cgi-bin/thread.cgi

        womit jeder Request auf any-forum.cgi auf das Script thread.cgi umgeschrieben wird. Anhand des REUQUEST_URI erstelle ich ein Objekt, dabei wird serverseitig nachgeschaut, ob es das Objekt gibt, wenn ja, habe ich ein valides URL-Objekt für die Response:

        my $uo = new Basic;

        Die Parameter nun, werden mit meinem Parser an das Objekt gebunden, das tut die Method param():

        $nr = $uo->param('show');

        Somit ist es möglich, mit nur einer ReqriteRule beliebig viele virtuelle Clones eines einzigen Scripts zu erstellen:

        http://rolfrost.de/cgi-bin/fred.cgi

        Vorausgesetzt natürlich, die Objekte sind auf dem Server hinterlegt. Erfolgt ein Request auf ein nicht konfiguriertes Objekt, wird eine Fehlerseite ausgegeben, Du kannst das gerne testen.

        Hotti

        1. Hi!

          Gegeben sei
          RewriteRule ^cgi-bin/.*forum.cgi   /cgi-bin/thread.cgi
          womit jeder Request auf any-forum.cgi auf das Script thread.cgi umgeschrieben wird.

          Soweit passt das noch irgendwie zur Fragestellung.

          Anhand des REUQUEST_URI erstelle ich ein Objekt, dabei wird serverseitig nachgeschaut, ob es das Objekt gibt, wenn ja, habe ich ein valides URL-Objekt für die Response:

          Aha, du bezogst dich gar nicht auf das Rewriting sondern schriebst von der danach vielleicht oder auch nicht stattfindenden Verarbeitung mit einem Programmiersystem. War zwar nicht das Thema, aber gut.

          Die Parameter nun, werden mit meinem Parser an das Objekt gebunden, das tut die Method param():

          Dazu müsstest du die Parameter ja erst einmal im Request haben - was ohne QSA nichts wird.

          Lo!