Skriptname in Ersetzung

URLs umschreiben, umleiten, blocken oder sperren - all das und noch viel mehr kann mit mod_rewrite erreicht werden. Mit regulären Ausdrücken, Conditions und Rules stehst Du auf Kriegsfuss? mod_rewrite macht nicht das was Du willst, oder funktioniert gar nicht? hier bist Du richtig!

Moderatoren: Bob, Super-Mod

Skriptname in Ersetzung

Beitragvon Sannaynian » 22.05.2012 19:02

Hallo zusammen,

ich befasse mich leider noch nicht lange mit mod_rewrite, allerdings bin ich auf ein Problem gestossen, dass ich auch nach längerer Suche nicht vollständig aus der Welt schaffen kann.
Zunächst möchte ich euch meine kümmerliche Leistung zeigen:

Code: Alles auswählen
RewriteEngine On
RewriteRule ^([^/]+)/([^/]+)$ index.php?controller=$1&action=$2 [QSA,L]
RewriteRule ^([^/]+)$ index.php?controller=$1 [QSA,L]


Was damit geht:

localhost/page/show => localhost/index.php?controller=page&action=show
localhost/page => localhost/index.php?controller=page

Was nicht geht:
localhost/page/ => -_-

Vorgeschichte:
Nachdem mein PHP Skript einige Exceptions geworfen hat, bin ich auf Fehlersuche gegangen. Eigentlich versucht es nur, aus dem Request String einen Controller und eine Action zu finden. Für beide Parameter gibt es auch Fallback Werte, wenn diese nicht angegeben wurden.
Irgendwie ist es aber passiert, dass mir der String "index.php" als Wert für 'controller' angehängt wurde.

Da es inzwischen soweit funktioniert wie oben angemerkt war ich zuerst zufrieden. Ein Dump meines Http Requests ergab aber folgendes:

Code: Alles auswählen
[REDIRECT_QUERY_STRING] => controller=page
[REDIRECT_URL] => /page
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] => controller=index.php&controller=page
[REQUEST_URI] => /page
[SCRIPT_NAME] => /index.php


Ich möchte natürlich dieses controller=index.php da raus bekommen, wie kann das entstanden sein? Ich weiß ehrlich gesagt nicht, wie mod_rewrite auf index.php kommt, wenn eine Anfrage an .../page/show oder ähnliches geschickt wird.
Warum ist mein $1 = "index.php"? Der Sktiptname taucht doch nur in der Ersetzung auf und nirgendwo, wo ein regulärer Ausdruck greifen kann. Übersehe ich etwas?

Vielen Dank schonmal für eure Hilfe. :)
Sannaynian
.
.
 
Beiträge: 1
Registriert: 22.05.2012 18:47

Zurück zu mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast