ChrisB: Mod Rewrite Problem/Frage

Beitrag lesen

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.