Severus: Mod Rewrite Problem/Frage

Hallo Leute,
ich hab eine kleines problem mit modRewrite

ich möchte, dass bei der eingabe von
     http://localhost/bla
auf:
     index.php?page=bla
umgeleitet wird.

Mein problem ist nun folgendes:
Es soll:
     http://localhost/bla?test=test
auf:
     index.php?page=bla&test=test
umgeleitet werden.

Ich hoffe jemand kann mit helfen
LG
Severus.

  1. Hi,

    ich hab eine kleines problem mit modRewrite

    ich möchte, dass bei der eingabe von
         http://localhost/bla
    auf:
         index.php?page=bla
    umgeleitet wird.

    Mein problem ist nun folgendes:

    OK, obiges hast du also schon.

    Es soll:
         http://localhost/bla?test=test
    auf:
         index.php?page=bla&test=test
    umgeleitet werden.

    Also willst du den originalen Querystring nach dem Umschreiben wieder anhängen lassen. Dafür gibt es das Flag QSA (Query String Append).

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Ah sehr gut danke das QSA hilft mal.
      Jetzt hab ich aber noch eine kleine frage

      ich möchte, dass bei der eingabe von
           http://localhost/bla
      auf:
           index.php?page=bla
      umgeleitet wird.

      Das funktioniert bereits, bis auf eine ausnahme
      ich muss bei der Regel folgendes angeben (flags lass ich grad absichtlich weg):

      RewriteRule ^([a-zA-Z0-9]+)$    index.php?page=$1

      ich möchte nun aber eigentlich

      RewriteRule ^(.+)$    index.php?page=$1

      nur funktioniert das nicht, denn da bekomme ich immer
      page=index.php

      Wieso ist das so und wie kann man das ändern?
      Lg Severus

      1. Hi,

        ich muss bei der Regel folgendes angeben (flags lass ich grad absichtlich weg):

        RewriteRule ^([a-zA-Z0-9]+)$    index.php?page=$1

        ich möchte nun aber eigentlich

        RewriteRule ^(.+)$    index.php?page=$1

        nur funktioniert das nicht, denn da bekomme ich immer
        page=index.php

        Wieso ist das so

        Weil, nachdem das Umschreiben stattgefunden hat, der Apache so tut, als ob das gerade Umgeschriebene ein neu herinkommender Request wäre - und auf diesen dann wieder erneut das Regelwerk anwendet.

        In deinem Falle heisst das, du rufst localhost/bla auf.
        Das wird jetzt (in beiden Fällen) in index.php?page=bla umgeschrieben.

        Auf geht's, neue Runde: Der heringekommene Request lautet jetzt /index.php?page=bla
        ^(.+)$ "matched" auf index.php - also wird dieser Wert, so wie es deine zweite RewriteRule angibt, auf index.php?page=index.php umgeschrieben.
        Bei der ersten Regel hingegen matched ^([a-zA-Z0-9]+)$ nicht auf index.php - weil es den Punkt nicht berücksichtigt.

        und wie kann man das ändern?

        Mit einer vorgeschalteten RewriteCond, die abprüft, ob das angeforderte einer physisch existenten Datei (oder auch einem Verzeichnis) entspricht - und dann die RewriteRule nicht zur Anwendung kommen lässt - siehe Doku.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.