mod_rewrite: path/12 zu path.cgi?x=12
Peter Kaufmann
- webserver
0 Cheatah
Hallo alle,
für mich ist das Thema mod_rewrite ganz neu und ich spiele im Moment etwas rum um mich erst einmal einzuarbeiten bevor ich mod_rewrite im richtigen Leben ;-) einsetze.
An diesem Problem versuche ich mich jetzt schon seit einer Stunde:
Ich will alle Aufrufe von example.org/test/stufe/X nach example.org/test/stufe.cgi?n=X umsetzen. Im Verzeichnis test habe ich dazu eine .htaccess Datei mit den folgenden Anweisungen angelegt:
| RewriteEngine on
| RewriteBase /test
| RewriteRule ^stufe/([0-9]+)$ stufe.cgi?n=$1 [L]
Das Script stufe.cgi existiert und gibt einfach nur den Parameter n aus (das Script lässt sich auch direkt mit example.org/test/stufe.cgi?n=X aurufen und funktioniert einwandfrei).
Leider funktioniert meine Lösung jedoch so nicht: Das Script wird zwar aufgerufen, es wird aber offensichtlich kein Parameter n übergeben.
Wo liegt mein Fehler? Kennt jemand ein gutes {deutsches|englisches} Tutorial zum Thema (die Apache Dokumentation zu mod_rewrite habe ich mir schon durchgelesen)?
Viele Grüße,
Peter
Hi,
| RewriteBase /test
| RewriteRule ^stufe/([0-9]+)$ stufe.cgi?n=$1 [L]
damit dürfte die URI /teststufe/42 auf /teststufe.cgi?n=42 umgeleitet werden. Passiert dies nicht?
Kennt jemand ein gutes {deutsches|englisches} Tutorial zum Thema (die Apache Dokumentation zu mod_rewrite habe ich mir schon durchgelesen)?
Innerhalb der Apache-Doku befinden sich einige Seiten zum Rewriting, u.a. auch ein Tutorial. Hast Du dies ebenfalls gefunden?
Cheatah
Hallo Cheatah,
| RewriteBase /test
| RewriteRule ^stufe/([0-9]+)$ stufe.cgi?n=$1 [L]damit dürfte die URI /teststufe/42 auf /teststufe.cgi?n=42 umgeleitet werden. Passiert dies nicht?
nein. Eigentlich ist es auch nicht das was ich erreichen möchte - ich möchte /test/stufe/23 nach /test/stufe.cgi?n=23 umleiten. Trotzdem habe ich es gerade mal ausprobiert und in / meine entsprechende .htaccess und das Script /test/stufe.cgi nach /teststufe.cgi kopiert. Ich bekomme hier wieder kein Parameter übergeben.
Innerhalb der Apache-Doku befinden sich einige Seiten zum Rewriting, u.a. auch ein Tutorial. Hast Du dies ebenfalls gefunden?
ebenfalls nein. Ich werde aber gleich mal danach suchen.
Grüße,
Peter
Hi,
damit dürfte die URI /teststufe/42 auf /teststufe.cgi?n=42 umgeleitet werden. Passiert dies nicht?
nein. Eigentlich ist es auch nicht das was ich erreichen möchte - ich möchte /test/stufe/23 nach /test/stufe.cgi?n=23 umleiten.
Computer machen nie das, was man von ihnen will, sondern immer nur das, was man ihnen sagt :-)
Trotzdem habe ich es gerade mal ausprobiert und in / meine entsprechende .htaccess und das Script /test/stufe.cgi nach /teststufe.cgi kopiert. Ich bekomme hier wieder kein Parameter übergeben.
Aber der Aufruf an sich wurde umgeleitet? Wie lauten Deine Direktiven jetzt genau?
Cheatah
Hallo Cheatah,
Computer machen nie das, was man von ihnen will, sondern immer nur das, was man ihnen sagt :-)
ja, ja - habe schon verstanden. Ich denke, daß soll ein Hinweis sein, daß ich RewriteBase nicht richtig verwende, oder?
Trotzdem habe ich es gerade mal ausprobiert und in / meine entsprechende .htaccess und das Script /test/stufe.cgi nach /teststufe.cgi kopiert. Ich bekomme hier wieder kein Parameter übergeben.
Aber der Aufruf an sich wurde umgeleitet? Wie lauten Deine Direktiven jetzt genau?
Ja, der Aufruf wurde bei _beiden_ Varianten (in / und /test/) auf das Script umgeleitet. Hier nocheinmal meine Direktiven:
RewriteEngine on
RewriteBase /test
RewriteRule ^stufe/([0-9]+)$ stufe.cgi?n=$1 [L]
Grüße,
Peter
Hi,
ja, ja - habe schon verstanden. Ich denke, daß soll ein Hinweis sein, daß ich RewriteBase nicht richtig verwende, oder?
nein, eigentlich wollte ich damit nur sagen, dass man im Computerbereich auf jedes noch so kleine Detail achten muss.
Ja, der Aufruf wurde bei _beiden_ Varianten (in / und /test/) auf das Script umgeleitet. Hier nocheinmal meine Direktiven:
RewriteBase /test
Das zum Beispiel ist in /test, nicht in /test/.
RewriteRule ^stufe/([0-9]+)$ stufe.cgi?n=$1 [L]
Und hier sagst Du, dass nach /test und vor stufe/ nicht ein einziges Zeichen mehr stehen darf.
Cheatah
Hallo Cheatah,
RewriteRule ^stufe/([0-9]+)$ stufe.cgi?n=$1 [L]
Und hier sagst Du, dass nach /test und vor stufe/ nicht ein einziges Zeichen mehr stehen darf.
das scheint mir nicht das eigentliche Problem zu sein: Der Aufruf wird ja schließlich auf stufe.cgi umgeleitet. Ich habe jetzt noch folgende Varianten durchprobiert:
... funktionieren tun sie aber alle nicht (selbst nicht (3)!). Der Verdacht liegt nah, daß das an dem / liegt. Dafür spricht auch:
Nicht wie gedacht funktionieren hingegen:
* example.org/test/stufe23 liefert 3 --- logisch
* example.org/test/stufeX23 liefert 23 --- auch logisch
* example.org/test/stufe/23 liefert nichts --- verstehe ich nicht
In /test existiert übrings kein Verzeichnis stufe.
Ich vermute das Problem jetzt irgendwie in der Serverkonfiguration. Hat jemand eine Idee womit der Effekt zuammenhängen könnte? Anmerken sollte ich vielleicht noch, daß mein Beispiel so nicht ganz korrekt ist: Eigentlich rufe ich ich.example.org/test/stufe auf und nicht example.org/test/stufe.
Trotzdem erst mal danke so weit!
Peter
Hallo nochmals.
Ich habe noch ein bisschen rumprobiert und herausgefunden, daß meine Regel funktioniert wenn das Verzeichnis stufe in test existiert. Das Verzeichnis muss nur existieren - was drin steht ist egal. Erklären kann ich mir das allerdings nicht.
Auch verwunderlich ist, daß die Regel
RewriteRule ^/stufe/([0-9]+)/([0-9]+)$ stufe.cgi?n=$1&m=$2 [L]
zusammen mit dem Aufruf example.org/test/stufe/1/2 funktioniert - mein Script bekommt beide Parameter übergeben. Ich hätte jetzt eigentlich erwartet, daß ich im Verzeichnis stufe ein Verzeichnis 1 hätte anlegen müssen ...
In der Serverkonfiguration habe ich auch nichts Auffälliges gefunden - allerdings kenne ich mich auch nicht so gut mit dem apache aus.
Grüße,
Peter