mod_rewrite und verzeichnisstrukturen
thomas
- programmiertechnik
0 Christian Kruse0 Sven Rautenberg
Hallo!
Ich habe lange rumprobiert und gesucht, leider funktionierts noch nicht:
Ich habe eine index.php, welche mit Variablen (z.B. id=2&user=4&etc=67 usw.) gefüttert wird, um verschiedene Inhalte zu generieren und auszugeben. Nun will ich aber die datei nicht mit www.irgendwas.de/index.php?id=2&user=4&etc=67 aufrufen, sondern mit www.irgendwas.de/2/4/67/variable4/variable5. Was muss in meiner .htaccess stehen, um das so umzuschreiben. Die übergebenen Variablen brauche ich dann in meinen $_GET [...]. Bisher hab ich das Problem gelöst mit folgender .htaccess:
---------schnipp----------
RewriteEngine on
RewriteRule ^(.*).html$ /index.php?inhalt=$1 [L]
---------schnapp----------
Hier funktioniert nur eine Variable. Wie muss die .htaccess aussehen?
Danke für Eure Mühe.
Thomas
Hallo thomas,
[... Rewrite-Rule für bel. viele Verzeichnistiefen, die in
GET-Parameter umgewandet werden sollen ...]
Hier funktioniert nur eine Variable. Wie muss die .htaccess aussehen?
Das geht nicht. Du kannst nur eine RewriteRule für endlich viele,
vorher definierte Verzeichnis-Tiefen machen. Es gibt keine
Schleifen oder so in mod_rewrite.
Grüße,
CK
Moin!
[... Rewrite-Rule für bel. viele Verzeichnistiefen, die in
GET-Parameter umgewandet werden sollen ...]
Hier funktioniert nur eine Variable. Wie muss die .htaccess aussehen?Das geht nicht. Du kannst nur eine RewriteRule für endlich viele,
vorher definierte Verzeichnis-Tiefen machen. Es gibt keine
Schleifen oder so in mod_rewrite.
Aber trotzdem ist nichts verloren. Man kann ^/(.*)$ in /index.php umschreiben lassen und erhält dann im Skript $_SERVER['REQUEST_URI']. Diese Variable enthält den ursprünglichen Request, und dann kann man im Programm mit Schleifen und sonstigem Zeugs den Pfad auseinandernehmen und entsprechend verzweigen.
GET-Parameter, die am Original-Pfad dranhängen, landen wie gewohnt in $_GET. POST-Requests in $_POST.
- Sven Rautenberg
hi,
GET-Parameter, die am Original-Pfad dranhängen, landen wie gewohnt in $_GET.
ist dafür nicht beim rewriten noch das flag [qsa] (query string append) erforderlich?
gruss,
wahsaga
Moin!
GET-Parameter, die am Original-Pfad dranhängen, landen wie gewohnt in $_GET.
ist dafür nicht beim rewriten noch das flag [qsa] (query string append) erforderlich?
Nein. Das ist nur erforderlich, wenn man durch Rewriting an GET was _ändern_ will.
Rewriting an sich beschränkt sich nämlich normalerweise wirklich nur auf Pfad und Dateiname, und guckt den Query-String gar nicht an.
- Sven Rautenberg
hi,
Nein. Das ist nur erforderlich, wenn man durch Rewriting an GET was _ändern_ will.
danke,
das erscheint mir bei genauerem nachdenken auch logisch.
Rewriting an sich beschränkt sich nämlich normalerweise wirklich nur auf Pfad und Dateiname, und guckt den Query-String gar nicht an.
das war mir bekannt, hab da wohl irgendwie etwas durcheinander gebracht.
gruss,
wahsaga
Das geht nicht. Du kannst nur eine RewriteRule für endlich viele,
vorher definierte Verzeichnis-Tiefen machen.
Wie muss so eine RewriteRule aussehen?
Aber trotzdem ist nichts verloren. Man kann ^/(.*)$ in /index.php umschreiben lassen und erhält dann im Skript $_SERVER['REQUEST_URI']. Diese Variable enthält den ursprünglichen Request, und dann kann man im Programm mit Schleifen und sonstigem Zeugs den Pfad auseinandernehmen und entsprechend verzweigen.
GET-Parameter, die am Original-Pfad dranhängen, landen wie gewohnt in $_GET. POST-Requests in $_POST.
Meine .htaccess sieht nun so aus:
----------------------
RewriteEngine on
RewriteRule ^/(.*)$ /indextest.php
----------------------
Funktioniert nicht. Ich könnte mich evtl. damit begnügen, die anzahl der Verteichnisse vorher zu definieren. Was muss ich schreiben? Wie funktioniert das beispielsweise bei diesem Forum?
Danke für Eure Mühe.
Thomas
Hallo thomas,
Das geht nicht. Du kannst nur eine RewriteRule für endlich
viele, vorher definierte Verzeichnis-Tiefen machen.Wie muss so eine RewriteRule aussehen?
RewriteRule ^/?([^/]+)/([^/]+) script.pl?a=$1&b=$2
RewriteEngine on
RewriteRule ^/(.*)$ /indextest.php
Fehlt nur noch eine RewriteBase-Angabe.
Wie funktioniert das beispielsweise bei diesem Forum?
DirectoryIndex /cgi-bin/fo_view
;)
Grüße,
CK
RewriteRule ^/?([^/]+)/([^/]+) script.pl?a=$1&b=$2
Danke für Deine Hilfe.
Ich rue das skript www.irgendwas.de/indextest.php nun auf mit www.irgendwas.de/var1/var2. Nur krieg ich damit immernoch kein Ergebnis, d.h. Fehler 403, da das nachgefragte Verzeichnis logischerweise nicht exstiert.
Wo liegt das Problem? Die RewriteRule
RewriteRule ^(.*).html$ /index.php?inhalt=$1 [L]
funktioniert auf dem selben Server ohne Probleme...
Thomas