Frank Stabenau: mod_rewrite Frage

Hallo Leute,

ich möchte per mod_rewrite Urls umschreiben.

Ich habe index.php?main=agb mittels

RewriteRule ^(.*).html$ index.php?main=$1

in agb.html umgewandelt.

Wenn ich nun aber hinten dran noch eine weitere Variable habe (zB. index.php?main=agb&lang=de) kann ich es mit

RewriteRule ^(.*).html,(.*)$ index.php?main=$1&lang=$2

in agb.html,de umwandeln.

Mein Problem ist nun aber, das Variante 1 nicht mehr funktioniert ohne das ich am Ende das Komma (agb.html,) stehen habe.

Wie setze ich dass am besten um?

Danke schonmal
Gruß
Frank

  1. Hi Frank,

    Ich habe index.php?main=agb mittels

    RewriteRule ^(.*).html$ index.php?main=$1

    in agb.html umgewandelt.

    Man sagt es eigentlich eher anders herum - du lässt agb.html in index.php?main=agb "umwandelt" bzw. umschreiben ;-)

    Wenn ich nun aber hinten dran noch eine weitere Variable habe (zB. index.php?main=agb&lang=de) kann ich es mit

    RewriteRule ^(.*).html,(.*)$ index.php?main=$1&lang=$2

    in agb.html,de umwandeln.

    Mein Problem ist nun aber, das Variante 1 nicht mehr funktioniert ohne das ich am Ende das Komma (agb.html,) stehen habe.

    Wie setze ich dass am besten um?

    Probiers mal so:

    RewriteRule ^(.*)\.html(,.*)?$ index.php?main=$1&lang=$2

    Alternativ ließe sich das aber wohl auch so machen, du rufst die Datei über
     agb.html (ohne Sprachangabe) oder
     agb.html?lang=de (mit Sprachangabe) auf,
    was umgewandelt wird zu
     index.php?main=agb&lang=de
    durch diese Rewrite Rule:

    RewriteRule ^(.*)\.html$ index.php?main=$1 [QSA]

    Das QSA steht für Query-String append und bewirkt, dass alle weiteren "Anhängsel" auch an die neue URL wieder mit angehängt werden.

    Ein Hinweis noch: Ich hoffe, dass du in der index.php _nicht_
     include $_GET['main']; //große Sicherheitslücke!
    verwendest.

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    Crypt::PasswdMD5 jetzt auch in PHP
    Schon gewusst, dass Bugs und Feature Vorschläge für das CForum ins Entwicklerforum oder in den BugTracker von WWWTech gehören und nicht hier her?
    1. Hallo,

      danke für deine schnelle Antwort.

      So richtig komme ich aber noch nicht klar.

      Mein Problem ist auch, das es nicht immer nur 1 oder 2 Variablen sind, sondern auch mal 5.

      Ein Hinweis noch: Ich hoffe, dass du in der index.php _nicht_
      include $_GET['main']; //große Sicherheitslücke!

      Es ist ein kleiner Shop, wo nur die anzeige der Artikel so übergeben wird. Dinge Speichern wird mit POST übergeben.

      Gruß
      Frank

      1. Hi Frank,

        Mein Problem ist auch, das es nicht immer nur 1 oder 2 Variablen sind, sondern auch mal 5.

        Wenn du es mit RewriteRule ^(.*)\.html$ index.php?main=$1 [QSA] machst, wird der komplette Query String mit umgeschrieben, also
          agb.html?lang=de&foo=bar&a=b&x=y
        würde umgeschrieben zu
          index.php?main=agb&lang=de&foo=bar&a=b&x=y

        Ein Hinweis noch: Ich hoffe, dass du in der index.php _nicht_
        include $_GET['main']; //große Sicherheitslücke!
        verwendest!

        Es ist ein kleiner Shop, wo nur die anzeige der Artikel so übergeben wird. Dinge Speichern wird mit POST übergeben.

        Ähm, was hat das eine mit dem Anderen zu tun? Von Speichern war nicht die Rede - es ging lediglich darum, wie du die Information ?main=agb auswertest und dass du es nicht wie oben gezeigt machen sollst, weil du dann eine fette Sicherheitslücke hättest.

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
        Crypt::PasswdMD5 jetzt auch in PHP
        Ein wirklich weiser Mann spielt nie mit einem Einhorn Bockspringen. (Häfft)