N'Abend Leute,
ich bin heute auf ein für mich nicht nachvollziehbares Problem beim URL-Rewriting im Zusammenhang mit URL-Parametern gestoßen.
Gegeben sei ein Apache 2.049 mit PHP 5.0.1 als Modul, das Gespann läuft unter Win2kSP4. In einem Verzeichnis unterhalb vom DocRoot liegt ein PHP-Script; die Datei heißt index.php und liefert abhängig von einem URL-Parameter page=xyz unterschiedliche Seiten aus. Auch das Erkennen und Verarbeiten weiterer URL-Parameter außer page= macht mir keine Schwierigkeiten.
Nun wollte ich aber "schönere" URLs haben; deswegen habe ich mich zum ersten Mal ernsthaft mit mod_rewrite befasst. Langsam einsteigen, nichts überstürzen, dachte ich. Also wollte ich im ersten Schritt z.B. abbilden:
/relaunch/start auf /relaunch/index.php?page=start
/relaunch/aktuell auf /relaunch/index.php?page=aktuell
Dazu habe ich in /relaunch/.htaccess folgendes notiert:
RewriteEngine on
RewriteBase /relaunch
RewriteRule ^start$ index.php?page=start
RewriteRule ^aktuell$ index.php?page=aktuell
Das funktioniert auch so, wie ich es erwarte. Deshalb bin ich einen Schritt weiter gegangen und habe ergänzt:
RewriteRule ^kontakt?(.*)$ index.php?page=kontakt&$1
Meiner Ansicht nach müsste der Aufruf von kontakt?name=blah nun auf die URL index.php?page=kontakt&name=blah abgebildet werden.
Seltsamerweise enthält $_GET aber nun nur _einen_ Eintrag, nämlich $GET['page']='kontakt'. Der zweite URL-Parameter fällt unter den Tisch. Das passt zusammen mit der Beobachtung, dass $_SERVER['QUERY_STRING']='page=kontakt' ist (mit print_r() ermittelt). Gleichzeitig ist aber $_SERVER['REQUEST_URI']='relaunch/kontakt?call=blah'. Doch warum taucht der Parameter nicht im $_GET-Array auf? Welche URL parst PHP nun eigentlich, die ursprüngliche oder die mit mod_rewrite veränderte? Die Einträge in $_SERVER deuten einen ziemlichen Mischmasch an.
Ich blick da nicht so richtig durch - wer mag mir helfen?
So long,
Martin
Ich wollt', ich wär ein Teppich. Dann könnte ich morgens liegenbleiben.