Mod_Rewrite - dynamische Parameteranzahl

Klein0r

Erfahrenes Mitglied
Also immoment nutze ich folgendes Script:

Code:
RewriteEngine on

RewriteRule ^([_0-9a-z]*)\.html$ index.php?load=$1
RewriteRule ^([_0-9a-z]*)-([_0-9a-z]*)\.html$ index.php?load=$1&p1=$2
RewriteRule ^([_0-9a-z]*)-([_0-9a-z]*)-([_0-9a-z]*)\.html$ index.php?load=$1&p1=$2&p2=$3
RewriteRule ^([_0-9a-z]*)-([_0-9a-z]*)-([_0-9a-z]*)-([_0-9a-z]*)\.html$ index.php?load=$1&p1=$2&p2=$3&p3=$4
RewriteRule ^([_0-9a-z]*)-([_0-9a-z]*)-([_0-9a-z]*)-([_0-9a-z]*)-([_0-9a-z]*)\.html$ index.php?load=$1&p1=$2&p2=$3&p3=$4&p4=$5

Dieser Code kann folgende Links Verarbeiten:

Code:
seite.html
seite-uebergabe1.html
seite-uebergabe1-uebergabe2.html
seite-uebergabe1-uebergabe2-uebergabe3.html
seite-uebergabe1-uebergabe2-uebergabe3-uebergabe4.html

Nun wäre meine Frage wie man das am intelligentesten Dynamisch lösen kann. Also das ich auch noch 5 oder 6 werte übergeben kann ohne das ich noch 2 neue Rules anlegen muss. Kann man das irgendwie lösen?

EDIT:
Eine weitere Frage von mir wäre, wie ich die Fehler abfangen kann falls keine Regel gezogen hat. Also da kommt ja denn nen 404 Serverfehler oder sowas (Fehler im CGI-Script).
In so einem Fall will ich natürlich auf eine Fehlerseite meiner Homepage verweisen...

lg
 
Zuletzt bearbeitet:
Das erste Problem ist durch Rekursion lösbar:
Code:
RewriteRule ^([_0-9a-z]+)\.html$ index.php?load=$1 [L,QSA]
RewriteRule ^([_0-9a-z]+(?:-[^-])*)-([_0-9a-z]+)\.html$ $1.html?p[]=$2 [N,QSA]
Das zweite mithilfe der ErrorDocument-Direktive, beispielsweise:
Code:
ErrorDocument 404 foobar.php
 
Funktioniert fast...
also aus
downloads-6-3-4-5.html

wird
load=downloads&p[]=6&p[]=3&p[]=4&p[]=5

Also durchnumerieren funktioniert noch nicht. :(

Ich hab deine Statements nochmal ein wenig angepasst da ich auchnoch Plus-zeichen in Parametern zulassen will und Großbuchstaben:
Code:
RewriteRule ^([_0-9a-zA-Z]+)\.html$ index.php?load=$1 [L,QSA]
RewriteRule ^([_0-9a-zA-Z]+(?:-[^-])*)-([+_0-9a-zA-Z]+)\.html$ $1.html?p[]=$2 [N,QSA]

Irgendwie bekomme ich auch eine Objekt nicht gefunden Seite wenn ich z.B.
downloads-6-1-bla-b.html

angebe

lg
 
Zuletzt bearbeitet:
Code:
RewriteRule ^([_0-9a-zA-Z]+)\.html$ index.php?load=$1 [L,QSA]
RewriteRule ^([_0-9a-zA-Z]+(?:-[^-]+)*)-([+_0-9a-zA-Z]+)\.html$ $1.html?p[]=$2 [N,QSA]
 
Ist noch genau der selbe Effekt - die Zahlen werden nicht ersetzt und es tauchen viele eckige Klammern in der URL auf...

Schade :(
 
Das Durchnummerieren geht auch rein technisch nicht. Es sie denn du gibst jeweils neun unterschiedliche Regeln an.
 
ich könnte den string doch aber an ein cgi-script übergeben welches mir die parameter durchnummeriert, oder?

Hast du sowas schonmal gemacht?
Sind meine ersten Schritte mit mod_rewrite... deswegen hab ich da nich so den druchblick :)

das durchnummerieren könnte ich natürlich auch mit php in einer schleife machen
indem ich den string durchgehe den ich mit $_SERVER['QUERY_STRING'] bekomme.

oder gibts da einfachere lösungen?

lg
 
Hi, es wäre in diesem Fall wahrscheinlich die leichtere Lösung, nur auf die index.php weiterzuleiten, und dann mittels PHP die angeforderte URL auseinanderzunehmen, Stichwort: explode(). Dann macht das Extrahieren der Parameter wenig Mühe und du brauchst nur eine RewriteRule.
Code:
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)\.html$ index.php?load=$1 [QSA]
Dann kann man in PHP über $_SERVER['REQUEST_URI'] auf die URL zugreifen.
 
Zuletzt bearbeitet:
Zurück