elexender: Rewrite rules

Hallo,

ich versuche ein Forum in die Website so einzubinden, dass es über Website-Framework läuft. Das Forum befindet sich im Verzeichnis "/forum". Alle URI's sollen mittels mod_rewrite abgefangen werden und an einzige Datei gegeben werden. Also an index.php.

Mit folgendem Eintrag in ".htaccess" rechne ich damit, dass das auch geschieht:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /

RewriteRule (.*) index.php?params=$1 [NS,L]

Also, egal was auch aufgerufen wird. Es soll in "index.php" geht in GET Parameter "params".

Wenn ich nun aber z.B.

"/forum/index.php?page=Board&boardID=3"

aufrufe. Dann sehe ich in GET nur "Array ( [params] => index.php )". Dabei sollte "params" doch die ganze URI beinhalten.

Die Frage ist, wo liegt der Fehler.
Danke im voraus für die Infos.

Gruss Alexander.

  1. Hi,

    Dabei sollte "params" doch die ganze URI beinhalten.

    wie kommst Du darauf? Die Dokumentation sagt *nichts* darüber, dass das Matching auf der ganzen URI stattfindet.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Hallo,

    ich versuche ein Forum in die Website so einzubinden, dass es über Website-Framework läuft. Das Forum befindet sich im Verzeichnis "/forum". Alle URI's sollen mittels mod_rewrite abgefangen werden und an einzige Datei gegeben werden. Also an index.php.

    Mit folgendem Eintrag in ".htaccess" rechne ich damit, dass das auch geschieht:

    Options +FollowSymLinks
    RewriteEngine on
    RewriteBase /

    RewriteRule (.*) index.php?params=$1 [NS,L]

    Also, egal was auch aufgerufen wird. Es soll in "index.php" geht in GET Parameter "params".

    Wenn ich nun aber z.B.

    "/forum/index.php?page=Board&boardID=3"

    aufrufe. Dann sehe ich in GET nur "Array ( [params] => index.php )". Dabei sollte "params" doch die ganze URI beinhalten.

    Die Frage ist, wo liegt der Fehler.

    Der Fehler ist zum einen auch ein Problem von mod_rewrite, dass eine Endlosschleife verhindert: Nach dem Umschreiben von foo.html auf index.php?params=foo.html erfolgt ein internal redirect; da der Request erneut deine .htaccess-Datei erreicht, werden die Regeln nochmals ausgeführt, nun gegen die index.php. Drum wird jetzt versucht auf index.php?params=index.php umzuschreiben. Nun wird erkannt, dass index.php=index.php ist, also Abbruch, kein internal redirect. Doch der QueryString wurde, bevor das erkannt wurde, bereits geändert.

    Zum anderen beinhaltet deine backreference im Verzeichniskontext nur einen lokalen filepath und standardmäßig wird der ursprüngliche QueryString überschrieben.

    Empfehlung: Spare dir params= und werte in PHP $_SERVER['REQUEST_URI'] und $_SERVER['QUERY_STRING'] aus.