Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

ganz spezielles mod rewrite

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
sanchez
PostRank 1
PostRank 1
Beiträge: 10
Registriert: 21.04.2006, 08:31

Beitrag von sanchez » 29.05.2006, 17:42

Hallo,

ich möchte bei folgender Adresse:

Code: Alles auswählen

http://www.domain.de/module/paramaterA_1/ParameterB_2/.../datei.html
dass per mod rewrite diese Seite aufgerufen wird:

Code: Alles auswählen

http://www.domain.de/index.php?parameterA=1&parameterB=2
die Anzahl der Parameter ist dabei beliebig (also auch die Ordner verschachtelung)...

leider bekomme ich die Regel irgendwie nicht hin...

bisher habe ich folgendes:

Code: Alles auswählen

RewriteRule ^module\/(.*?)_(.*?)\/.*?.html$ index.php?$1=$2
ich komme da irgendwie nciht weiter...hat da jemand evtl. eine Lösung?[/code]

Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

haha
PostRank 9
PostRank 9
Beiträge: 1065
Registriert: 03.04.2006, 18:08
Wohnort: Bi Hamborg

Beitrag von haha » 30.05.2006, 13:53

sanchez hat geschrieben:

Code: Alles auswählen

/module/paramaterA_1/ParameterB_2/.../datei.html
dass per mod rewrite diese Seite aufgerufen wird:

Code: Alles auswählen

/index.php?parameterA=1&parameterB=2
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.

r2d2
PostRank 4
PostRank 4
Beiträge: 150
Registriert: 19.03.2004, 23:45

Beitrag von r2d2 » 30.05.2006, 15:00

du kannst auch alle möglichkeiten aufzählen:
RewriteRule ^(.*).php/(.*)_(.*)/(.*)_(.*)/(.*)_(.*)/(.*)_(.*)$ /$1.php?$2=$3&$4=$5&$6=$7&$8=$9 [L]
RewriteRule ^(.*).php/(.*)_(.*)/(.*)_(.*)/(.*)_(.*)$ /$1.php?$2=$3&$4=$5&$6=$7 [L]
RewriteRule ^(.*).php/(.*)_(.*)/(.*)_(.*)$ /$1.php?$2=$3&$4=$5 [L]
RewriteRule ^(.*).php/(.*)_(.*)$ /$1.php?$2=$3 [L]
r2d2