WAMP und Mod_Rewrite

16.08.2004 Nachdem das Apache Modul Mod_Rewrite inzwischen schon ein Standardwerkzeug zur Suchmaschinen-Optimierung dynamisch erstellter Websites ist, wollte ich mich auch mal eingehender damit beschäftigen, und dieses auch gleich auf mein neu erstelltes Gästebuch auf meiner Hauptdomain anwenden. WAMP, d.h. eine lokale Testumgebung des Apache Webservers mit MySQL Datenbank und PHP auf Windows, hatte ich schon vor einiger Zeit auf meinem PC installiert. Nun brauchte ich also nur noch das Modul aktivieren und konnte dann gleich die erste Rewrite Rule in die .htaccess schreiben. Nachdem ich die betreffende Adresse in den Browser eingegeben hatte, lieferte der Apache aber eine 404 Status-Meldung zurück: nicht gefunden.

Der erste Versuch war also fehlgeschlagen, und ich hatte keine Ahnung, woran es nun liegen konnte. War das Modul noch gar nicht funktionstüchtig, oder stimmten die Regeln in der .htaccess nicht? In über Google gefundenen Foren-Threads konnte ich dann nachlesen, dass ich nicht der einzige mit dem Problem bin. Die Antworten, falls es welche gab, halfen dem Fragesteller und mir oft nicht weiter oder führten in die Irre: z.B., dass man sich Linux installieren solle, da Mod_Rewrite unter Windows nicht funktioniere, bzw. einen Bug habe (falsch), oder dass eine 404 Statusmeldung zeigt, dass das Modul bereits arbeitet, folglich die Rewrite Regeln nicht stimmen (falsch), oder dass die phpinfo.php den Begriff mod_rewrite enthält, wenn das Modul aktiviert ist (falsch). Nach langem Suchen hatte ich dann den eigentlichen Fehler gefunden: die .htaccess wurden ignoriert, ich musste also auch hier den Server entsprechend konfigurieren. Im folgenden fasse ich nochmal die einzelnen Schritte zusammen, wie ich eine Aktivierung von Mod_rewrite auf meinem lokalen Windows-Apache bewerkstelligt habe.

Anleitung: mod_rewrite unter Apache/Windows aktivieren

Das Modul mod_rewrite wird folgendermaßen aktiviert: In dem Verzeichnis, in dem der Apache Webserver installiert ist, befindet sich das Verzeichnis conf, und in diesem wiederum die Datei httpd.conf, die mit einem Editor (z.B. Notepad) geöffnet wird. Die Datei enthält je nach Apache-Version ein oder zwei Zeilen mit dem String mod_rewrite:

#LoadModule rewrite_module modules/mod_rewrite.so (Apache 1.3 + Apache 2.x)

#AddModule mod_rewrite.c (Apache 1.3)

Das Modul wird aktiviert, indem die Rauten # entfernt werden, die Datei httpd.conf abgespeichert, und der Apache (neu) gestartet wird.

Vor dem Abspeichern der Datei sollte man überprüfen, ob auch die .htaccess aktiviert sind:

# This controls which options the .htaccess files in directories can
# override. Can also be "All", or any combination of "Options", "FileInfo",
# "AuthConfig", and "Limit"
#
AllowOverride None

Ein None muss gegebenenfalls durch ein All ersetzt werden:

AllowOverride All

Auch hier werden die Änderungen erst aktiv, wenn nach Abspeicherung der Datei httpd.conf der Apache neu gestartet wird

Nun wird eine Testdatei test-1.html erstellt, und in dem Test-Ordner /test untergebracht. Wenn der lokale Apache läuft, kann diese über die Adresse http://lokalhost/test/test-1.html aufgerufen werden.

Um die Datei unter der Adresse http://lokalhost/test/test-2.html zu erreichen, wird in einer .htaccess folgende Anweisung geschrieben:

RewriteEngine On
RewriteBase /test
RewriteRule ^test-2\.html$ test-1\.html [L]

Die erste Zeile startet das Modul mod_rewrite; die zweite Zeile zeigt das Verzeichnis an, für den die Regel gelten soll, in diesem Fall der zuvor erstellte Test-Ordner; die dritte Zeile zeigt die Regel an, dass für die (nicht vorhandene) Datei test-2.html die Datei test-1.html ausgeliefert wird. Die .htaccess wird in das Verzeichnis /test abgespeichert.

Gibt man im Browser die Adresse http://lokalhost/test/test-2.html ein, und wird die Datei test-1.html angezeigt, ist das Modul mod_rewrite erfolgreich aktiviert. Falls dies nicht der Fall sein sollte, sollte überprüft werden, a) ob in der Datei httpd.conf das Verzeichnis für das Document Root korrekt angegeben ist, d.h. das Windows-Verzeichnis, in welchem die Webseiten untergebracht sind (im folgenden Beispiel der Pfad bei unveränderter Standardinstallation):

<Directory "C:/Programme/Apache_Group/Apache/htdocs">

und b) ob den Access Dateien auch der Name .htaccess zugeordnet ist:

AccessFileName .htaccess

Weitere Kommentare und Fragen zu diesem Thema können in meinem Forum gepostet werden.