Michi: Apache mod_rewrite / mehrere Variablen übergeben

Hallo,

ich möchte mehrere Variablen per GET übergeben.
Dabei bin ich beim googeln auf folgende Seite gestoßen:
http://www.modrewrite.de/13.9.0.0.1.0.phtml

seite_12.html ~> seite.php?id=12
RewriteRule ^seite_([0-9]+).html$ seite.php?id=$1

Funktioniert auch prima.

Suche aber eine Möglichkeit mehrere Variablen zu übergeben.
Da das Thema mod_rewrite neu für mich ist, tue ich mich schwer und hoffe auf Eure Hilfe.

Sowas in der Art:

seite_12_45.html ~> seite.php?id=12&go=45
RewriteRule ????

Geht sowas überhaut?
Wenn ja wieeee

  1. Hallo,

    Suche aber eine Möglichkeit mehrere Variablen zu übergeben.
    Da das Thema mod_rewrite neu für mich ist, tue ich mich schwer und hoffe auf Eure Hilfe.

    Sowas in der Art:

    seite_12_45.html ~> seite.php?id=12&go=45
    RewriteRule ????

    RewriteRule akzeptiert reguläre Ausdrücke. Ein regulärer Ausdruck, der auf seite_ZAHL_ZAHL.html matcht, wäre z.B. folgender:

    ^seite_[0-9]+_[0-9]+.html$

    Jetzt willst Du den umschreiben, also packst Du ihn in RewriteRule:

    RewriteRule ^seite_[0-9]+_[0-9]+\.html$  seite.php

    Das ist allerdings noch nicht alles - Du willst ja Teile davon als Parameter weiterverwenden. Damit das klappt, musst Du Informationen aus dem regulären Ausdruck extrahieren. Wenn Du Klammern setzt, kannst Du auf die geklammerten Teile eines regulären Ausdrucks später zugreifen, in idesem Fall also:

    RewriteRule ^seite_([0-9]+)_([0-9]+)\.html$  seite.php?id=$1&go=$2

    $1 enthält dann das, was von der ersten Klammer gematcht wird, $2 das, was von der zweiten Klammer gematcht wird.

    Ferner würde ich vorschlagen, dass Du das QSA-Flag noch setzt:

    RewriteRule ^seite_([0-9]+)_([0-9]+)\.html$  seite.php?id=$1&go=$2 [QSA]

    Das sorgt dafür, dass eine Query-String auch erneut angehängt wird, d.h. aus seite_1_1.html?a=b ein seite.php?id=1&go=1&a=b wird (das wird ohne QSA nicht gemacht).

    Viele Grüße,
    Christian

    1. Hallo Christian,

      erstmal vielen DANK für die ausführliche und schnelle Antwort.

      Funktioniert prima!

      ich habe das versucht (ohne Erfolg)
      [code=php]^seite_[+0-9]_[+0-9].html$  seite.php?a=$1&b=$2[/code]

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

      Noch eine weiter Frage:

      jetzt werden ja mit [+0-9] "nur" int Zahlen übergeben.
      Kann man auch Strings übergeben?

      z.B.:
      seite_12_a12bc.html

      Da muss mann Bestimmt das [+0-9] erweitern.
      War wieee

      1. Hallo,

        ich habe das versucht (ohne Erfolg)
        RewriteRule ^seite_[+0-9]_[+0-9].html$  seite.php?a=$1&b=$2

        Ja, das kann nicht funktionieren.

        [] matcht genau ein Zeichen, das alles sein kann, was zwischen den Klammern angegeben ist. Das heißt, [AB] matcht A oder B, [ABC] matcht A, B oder C. Das + hat *außerhalb* von [] die Bedeutung, dass das Zeichen vorher mehrfach vorkommen darf, d.h. A+ heißt "ein oder mehr A", B+ heißt "ein oder mehr B", [0-9]+ heißt "ein oder mehr Ziffern von 0 bis 9". + *innerhalb* von Klammern [] hat keine Bedeutung, d.h. [+A] heißt "ein zeichen, + oder A".

        Kann man auch Strings übergeben?

        z.B.:
        seite_12_a12bc.html

        Klar.

        Da muss mann Bestimmt das [+0-9] erweitern.

        Du meinst das ([0-9]+) - ja, klar, mach da einfach ein ([A-Za-z0-9]+) draus, dann funktionieren auch Buchstaben.

        Ich schlage vor, Du liest Dir folgende Links zu regulären Ausdrücken durch, die sollten Deine Fragen klären:

        http://regexp-evaluator.de/tutorial/
        http://www.regular-expressions.info/

        (Reguläre Ausdrücke sind auch außerhalb der Anwendungen von mod_rewrite enorm praktsich, lohnt sich also grundsätzlich, sich das mal anzusehen.)

        Viele Grüße,
        Christian

        1. Hallo Chris,

          nochmals Danke.
          So eine tolle Antwort ist nicht sebstverständlich.

          Ich wüsche Dir ein schönes Wochenende

          Grüßle
          Michi

      2. @@Michi:

        Funktioniert prima!
        ich habe das versucht (ohne Erfolg)

        Hä?? Was denn nun?

        ^seite_[+0-9]_[+0-9].html$  seite.php?a=$1&b=$2

        Den Unterschied zwischen [0-9]+ und [+0-9] liest du in [http://de.selfhtml.org/perl/sprache/regexpr.htm#zeichenketten@title=SELFHTML] nach.

        jetzt werden ja mit [+0-9] "nur" int Zahlen übergeben.
        Kann man auch Strings übergeben?

        Reguläre Ausdrücke abeiten immer mit Strings, niemals mit Zahlen. Es könne auch Strings sein, die nur aus Ziffernzeichen bestehen.

        Da muss mann Bestimmt das [+0-9] erweitern.

        Siehe o.g. Seite in SELFHTML.

        Live long and prosper,
        Gunnar

        --
        „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)