Sönke Tesch: mod_rewrite - ein paar grundsätzliche Fragen

Beitrag lesen

  1. reicht es in der Datei .htaccess "RewriteEngine On" zu schreiben, wenn das Rewrite-Modul installiert ist, oder muß dazu auch der Server neu gestartet werden?

Ja, das reicht. Die .htaccess wird bei jeder Anfrage vom Server neu gelesen und somit sind auch die Einstellungen in diesen Dateien quasi sofort aktiv.

  1. Wofür ist eigentlich die RewriteCond? Die RewriteRule ist mir klar, aber die Condition? Wozu? Weder meine beiden Apache-Bücher, die ich mir ausgeborgt habe, noch längeres Stöbern im Archiv konnten mir diese Frage beantworten.

cond -> condition = Bedingung.

http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteCond:
"The RewriteCond directive defines a rule condition. Precede a RewriteRule directive with one or more RewriteCond directives. The following rewriting rule is only used if its pattern matches the current state of the URI and if these additional conditions apply too. "

Auf Deutsch: RewriteRule ist zum _Ändern_ der URI da, mit RewriteCond legst Du fest, _ob_ die URI überhaupt geändert werden soll. Jeder Block aus RewriteCond-Anweisungen gehört dabei zu der jeweils darauf folgenden RewriteRule-Anweisung.

  1. Folgendes habe ich ausprobiert:
    RewriteRule ^test/(.*)/(.*)/(.*).html ^test/$3.php?$1=$2
    Das sollte eigentlich bewirken, daß man einen Parameter im Pfad übergeben kann, also aus test/id/10/show.html sollte test/show.php?id=10 werden. Da der Server aber antwortet, daß er die Datei "test/id/10/show.html" nicht finden kann, nehme ich an, daß die RewriteEngine überhaupt nicht greift.

Also im zweiten Teil ist IMHO schonmal garantiert das ^ am Anfang zuviel. Dazu kommt noch, daß die $n-Dinger bei 0 anfangen, nicht bei 1.
Probier mal etwas in der Richtung

RewriteRule ^/test/(.*)/(.*)/(.*).html$ /test/$2.php?$0=$1

Das gilt aber nur, wenn /test im Basisverzeichnis liegt, also unter "http://deine.domain.de/test/" zu erreichen ist und diese .htaccess, unter "http://deine.domain.de/.htaccess" (ortsmäßig meine ich, daß sie dort nicht per Browser abrufbar sein muß und darf, ist klar).
Andernfalls mußt Du wohl mit RewriteBase arbeiten. Schau Dir nochmal die Beispiele in der Anleitung unter http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteRule an.

Davon abgesehen: Wenn Du schon dabei bist, solltest Du vielleicht die Adressen nicht nur maschinen-, sondern auch gleich menschenfreundlich machen. "test/id/10/show.html" kann ich mir nicht merken, "test/artikel/10" schon viel besser.

Gruß,
  soenk.e