Cruz: mod_rewrite

Beitrag lesen

Hallo Albert,

RewriteRule ^seite_([0-9]+).html$ seite.php?id=$1

Es ist nicht korrekt, das hier "eine Variable als Zahl" definiert wird. Diese RewriteRules funktionieren so, dass links ein regulärer Ausdruck steht, der auf eine Eingabe angewendet wird und rechts eine Regel wie eine Eingabe auf den der reguläre Ausdruck passt behandelt wird.

Reguläre Ausdrücke sind sehr mächtige Werkzeuge, sie sind eine Art Schablonen oder Textmuster die entscheiden, ob ein gegebener Text auf  eben dieses Muster passt oder nicht.

Im obigen RewriteRule zum Beispiel bedeutet das ([0-9]+) dass genau an der Stelle beliebig viele Ziffern zwischen 0 und 9 stehen dürfen.

Würde man diese Regel so umschreiben:

RewriteRule ^seite_([0-9a-zA-Z]+).html$ seite.php?id=$1

dann dürften an der Stelle nicht nur die Ziffern, sondern auch ein beliebiger großer oder kleiner Buchstabe von a bis z stehen.

In $1 (siehe seite.php?id=$1) steht dann der von den ( ) eingegrenzte erkannte Text, also genau das was in seite_xxx.html zwischen dem _ und dem . steht.

Um deine RewriteRule mit gutem Gewissen unter Kontrolle zu haben und nicht 100 mal im Forum nachfragen zu müssen, bis es funktioniert, solltest du dich mit regulären Ausdrücken ausseinandersetzen. Das muss nicht in Verbindung mit Perl sein, es reicht vollkommen zu verstehen wie diese Muster genau anzugeben sind. Vielleicht wirst du aus dieser Tabelle besser schlau:
http://de.selfhtml.org/perl/sprache/regexpr.htm#zeichen
Und lies am besten noch die danach kommenden zwei Tabellen und den Text drum herum durch.

Damit die RewriteRule überhaupt greift, muss die linke Seite auf eine angegebene URL passen.

Warum wird dieser Ausdruck also noch nicht die richtige Lösung für dich sein?
^seite_([0-9a-zA-Z]+).html$

Wenn du mit den regulären Ausdrücken überhaupt nicht zurande kommst, kannst du doch alternativ mittels einer index.html im /gaestebuch Verzeichnis ganz einfach eine Umleitung auf index.php?cat=gaestebuch realisieren.

Gruß,
Cruz