sanchez hat geschrieben:dass per mod rewrite diese Seite aufgerufen wird:
die Anzahl der Parameter ist dabei beliebig (also auch die Ordner verschachtelung)...
Das geht so nicht, da mod_rewrite bzw. PCRE maximal neun Variablen bestücken kann ($1 bis $9). Obendrein muss im Muster pro Parameterblock ("paramaterA_1/") eine zusätzliche Klammer zur Abgrenzung eingesetzt werden, so dass die maximale Anzahl an Parameterblöcken auf drei sinkt (neun Klammern insgesamt, je Block eine Klammer für Name, Wert und Abgrenzung, macht 9 : 3 = 3).
Das Muster dafür sähe so aus: ^module/(([a-zA-Z0-9]+)_([a-zA-Z0-9%]+)/)(([a-zA-Z0-9]+)_([a-zA-Z0-9%]+)/)?(([a-zA-Z0-9]+)_([a-zA-Z0-9%]+)/)?datei\.html$
Die URL-Schablone dafür wäre folgende: index.php?$2=$3&$5=$6&$8=$9
Müssen es unbedingt mehr als drei Blöcke sein, bleibt Dir nichts anderes übrig, als die komplette Verarbeitung in das Skript zu verlegen. Versuche dabei nicht, noch per mod_rewrite irgendwelche Vorarbeiten zu erledigen; das bringt nichts außer einem Durcheinander, weil die Verarbeitung an zwei getrennten Orten erfolgt. Die Zeile
RewriteRule ^module/([a-zA-Z0-9]+_[a-zA-Z0-9%]+/)+datei\.html$ index.php?pfad=$1
reicht vollkommen.
Nebenbei: Wofür brauchst Du überhaupt das datei.html am Ende, wenn Du es doch sowieso nicht weitergibst? So wie im Bespiel ist das unnötiger Ballast.
Und noch was:
RewriteRule ^module\/(.*?)_(.*?)\/.*?.html$ index.php?$1=$2
- Benutze niemals .*, wenn es sich nicht irgendwie vermeiden lässt. .* schlürft
alles weg, was im Weg steht. Anhand Deines Musters ließe sich ein Pfad auch so aufteilen: module/
parameterA_1/parameterB_2/parameterC_
3/
datei.html. Oder so (theoretisch): module/
parameterA_1/parameterB_
2/parameterC_3/
datei.html. Oder so (auch nur theoretisch): module/
parameterA_
1/
parameterB_2/parameterC_3/datei.xyzhtml.
- Wenn im Text ein Punkt stehen soll, dann lass da auch einen Punkt stehen ("\.") und nicht ein beliebiges Zeichen ("."). Siehe das kleine
z im letzten Beispiel oben.
- Benutze * nur, wenn Du an der Stelle definitiv auch die Möglichkeit vorsehen willst, dass da nichts steht. In einem Großteil der Fälle, wo ein * benutzt wird, ist eigentlich + gemeint.
- .*? macht keinen Sinn (wenn's überhaupt akzeptiert wird); .* kann auch ganz alleine Nichts bedeuten, dazu muss nicht noch ein Fragezeichen hinterher.