| 

.NET C# Java Javascript Exception

1
Hallo

Mein vorhaben:

http://www.domain.de/veranstaltung/3/2
wird zu (ohne das der Nutzer dies sieht):
http://www.domain.de/index.php?seite=veranstaltung&id1=3&id2=2

Per HTACCESS habe ich es hinbekommen mit domain.de/veranstaltung/3:
RewriteRule ^([^/]+)(?:/?|/(.+?)/?)$ index.php?seite=$1&id1=$2 [NC,QSA,L]


Ich verstehe davon nur Bahnhof. Werde immer auf die Seite http://httpd.apache.org/docs/current/mod/mod_rewrite.html verwiesen über Google, aber das hilft mir nicht. Da ich nichts kapiere :)

Was ich mit rumprobieren hinbekommen hab ist wenn man exakt die Form:
http://www.domain.de/veranstaltung/3/2 hat:
RewriteRule ^([^/]+)(?:/?|/(.+?)/?/(.+?)/?)$ index.php?seite=$1&id1=$2&id2=$3 [NC,QSA,L]

Wenn man aber dann nur http://www.domain.de/veranstaltung/3 kommt ein Fehler.
Es soll aber alles möglich sein. (Also nur veranstaltung, dann mit 1 Variabel und mit 2).

Kann mir Jemand diese Schreibweise erklären & wie ich es mache?
Vielen Dank.
01.12.2013
meone 99 1 6
1 Antwort
2
RewriteRule ^([^/]+)(/?([^/]+))?(/([^/]+))? index.php?seite=$1&id1=$3&id2=$5 [NC,QSA,L]


Die Regel matcht auf http://www.domain.de/veranstaltung/3/2(/) http://www.domain.de/veranstaltung/3(/) und http://www.domain.de/veranstaltung(/) wobei (/) für optionaler abschließender / steht. Übrigens auch auf http://www.domain.de/veranstaltung/3/2/1(/) wobei die 1 unterschlagen wird.

Da du schreibst, dass du mit der Dokumentation nichts anfangen kannst, drösel ich das mal in ein paar Teile auf.

^([^/]+)(/?([^/]+))?(/([^/]+))?

Ist der RegEx gegen den der Request-Path geprüft wird

1. ^ : Zeichenkette muss vom ersten Zeichen an ausgewertet werden
2. ([^/]+) Die runden Klammern gruppieren einfach das Pattern in den Klammern zu einem Unterausdruck
2.1 [^/] Alle zusammenhängenden Zeichen außer /
2.2 + mindestens ein Zeichen welches auf das vorherige Muster passt
3. (/([^/]+))?
3.1 / Am Anfang muss ein / stehen
3.2 ([^/]+) Wie 2.
3.3 ? Alles in der Klammer davor ist optional
4. (/([^/]+))? Siehe 3.

index.php?seite=$1&id1=$3&id2=$5

Ist dann das Mapping des RegEx auf den direkten Aufruf der PHP-Datei (mit GET-Parametern) wobei $<INT> für den Wert steht, den die Klammer mit dem jeweiligen Index entspricht. Darum auch $3 und $5 für id1 und id2, da sonst der / am Anfang des Parameters mit übergeben würde.

[NC,QSA,L]

Diese Flags steuern die weitere Verarbeitung des Requests, aber das ist in der Dokumentation jetzt wirklich gut erklärt.
01.12.2013
phg 1,6k 3
Ich danke dir. Perfekt.
Auch super vielen dank für die Erklärung, endlich verstehe ich es etwas mehr :-)
meone 02.12.2013

Stelle deine Htaccess-Frage jetzt!