Der Martin: mod_rewrite - Problem

Beitrag lesen

Hallo,

Ich möchte folgendes:

"http://meine-domain/Katalog/Sprueche" soll zu "http://meine-domain/Katalog/spuch.php" "http://meine-domain/Katalog/Wert1" soll zu "http://meine-domain/Katalog/such.php?wt=Wert1" "http://meine-domain/Katalog/Autor" soll zu "http://meine-domain/Katalog/autoren.php" "http://meine-domain/Katalog/Autor/Max-Muster" soll zu "http://meine-domain/Katalog/autor.php?wt=Max-Muster" usw... werden.

dann ist mod_rewrite wohl tatsächlich der geeignete Ansatz.

RewriteEngine On

> RewriteBase /Katalog/
> RewriteRule ^Sprueche$ http://meine-domain/Katalog/spruch.php [L]
> RewriteRule ^([!Sprueche]*)$ http://meine-domain/Katalog/such.php?wt=$1 [L]

Schon die erste RewriteRule ist vermutlich nicht, was du willst. Die erzeugt nämlich einen Redirect, weist also den Browser an, den gesuchten Inhalt unter einer anderen URL anzufragen - mit dem Erfolg, dass die geänderte URL auch so in der Browser-Adresszeile steht. Wenn du serverintern umschreiben willst (und davon gehe ich aus), darfst du als Umleitungsziel keine HTTP-URL angeben. Also wohl eher so:

RewriteRule ^Sprueche$ /Katalog/spruch.php [L]

Bei der zweiten RewriteRule ist das Muster unsinnig. Ist dir bewusst, dass [] in einem RegEx eine Zeichenklasse bedeutet, also "ein beliebiges der in der Klammer stehenden Zeichen"? Was da steht bedeutet also, du suchst beliebig viele Vorkommen eines der Zeichen !, S, p, r, u, e, c oder h. Wieso setzt du überhaupt eckige Klammern hier? Schreib das Ausrufezeichen als Negation vor die runde Klammer.

Die htaccess wollte ich dann noch entsprechend erweitern, aber leider funktioniert nur die erste Regel, schon bei de zweiten kommt ein 404

Ja, kein Wunder.

So long,  Martin

PS: Es ist Unfug, URLs oder Apache-Code im Posting-Text als PHP-Code auszuzeichnen.

--
Finanztipp: Leihen Sie sich Geld von einem Pessimisten. Er rechnet sowieso nicht damit, dass er es zurückbekommt. Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(