====== Fehler ermitteln, aus welchem Grund mod-rewrite nicht läuft ======
===== Ist das mod_rewrite Modul auf dem Server geladen? =====
Um mod_rewrite überhaupt verwenden zu können, müsssen wir zunächst sicherstellen, dass das Modul auf dem Server überhaupt läuft. Dazu rufen wir folgende Datei auf
www.deinedomain.de/backend/phpinfo.php
Unter dem Bereich apache sollte dann im Eintrag Loaded Modules das Modul mod_rewrite aufgelistet sein. Ist dies nicht vorhanden, hilft nur noch der Kontakt zum Provider.
===== Funktionstest des mod_rewrite Moduls =====
Um die grundsätzliche Funktionalität des Moduls zu testen, starten wir mit einer einfachen .htaccess-Datei, die wir in das Projektverzeichnis legen. Dort ist schon standardmäßig nach der Sefrgeno-Installation eine Datei htaccess.txt vorhanden, die später für das korrekte Umschreiben der urls sorgt. Für den Funktionstest verwenden wir jedoch im Folgenden eine .htaccess-Datei, die nur folgende Anweisungen enthält:
RewriteEngine On
RewriteRule ^ http://www.google.de [R,L]
Diese Einstellung sorgt dafür, dass jede Anfrage, die an unsere Domain geschickt wird, zu google.de weitergeleitet wird. Funktioniert diese Weiterleitung problemlos, so wird auch der mod_rewrite von Sefrengo in aller Regel problemlos laufen.
===== Es kommt zwar keine Fehlermeldung, aber die Weiterleitung funktioniert auch nicht =====
==== Ursache ====
Die Ursache hierfür ist, dass die Direktive **AllowOverride** in der httpd.conf (der Serverkonfigurationsdatei) für deinen -Abschnitt auf //none// steht oder nicht erlaubt ist, //FileInfo// zu überschreiben. In AllowOverride wird quasi angegeben, was in .htaccess-Dateien alles genutzt werden kann (bzw. welche Einstellungen aus der httpd.conf überschrieben werden können). Für den Gebrauch von mod_rewrite muss jedoch //FileInfo// überschrieben werden dürfen.
==== Lösung ====
In diesem Fall hilft es nur, den Provider zu kontaktieren und ihn zu bitten, die Serverkonfiguration entsprechend zu ändern. Die Minimalkonfiguration für unser htdocs-Verzeichnis sieht folgendermaßen aus:
AllowOverride FileInfo
**Achtung:** Wichtig dabei ist das Setzen von AllowOverride im richtigen -Container. Davon gibt es in der httpd.conf mehere. Für uns relevant ist derjenige, der unseren DocumentRoot enthält, also bspw. , wobei web999 hier unser Account- bzw. Username auf dem Server ist.
===== Fehler 403 Forbidden beim Aufruf =====
==== Ursache ====
In der **error_log**-Datei des Apache-Servers steht dazu folgendes:
[error] [client ...] Options FollowSymLinks or SymLinksIfOwnerMatch is off
which implies that RewriteRule directive is forbidden: /www/htdocs/web999/
Die Datei **error_log** findet man meistens in einem Verzeichnis namens **log** auf dem Server, das auf der gleichen Ebene liegt wie das html-Verzeichnis. Auch Sefrengo legt zwei Verzeichnisse //logs// in den Ordnern //backend// und //cms// an. //Diese sind hier nicht gemeint!//
Das Nutzen von mod_rewrite in .htaccess-Dateien ist uns zwar erlaubt (vgl. Punkt 3, also //AllowOverride// ist korrekt gesetzt), jedoch ist bei der Direktive **Options** die Option **FollowSymLinks** oder **SymLinksIfOwnerMatch** abgeschaltet.
FollowSymLinks bedeutet, dass der Server symbolischen Links folgt. SymLinksIfOwnerMatch bedeutet, dass der Server nur symbolischen Links folgt, wo die Benuzerkennung von dem Link mit der Benutzerkennung des Zielverzeichnis / -datei übereinstimmt. Letzteres sollte wenn möglich vermieden werden (Performance).
==== Lösung ====
Wir erweitern unsere .htaccess-Datei folgendermaßen
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^ http://www.google.de [R,L]
Das funktioniert allerdings nur dann, wenn wir in der .htaccess die Direktive //Options// überschreiben dürfen. (vgl. das Problem mit AllowOverride unter 3). Wenn das Überschreiben von Options in .htaccess-Dateien nicht freigegeben ist, kommt beim Webseitenaufruf ein **500 Internal Server Error.**
===== 500 Internal Server Error beim Aufruf =====
==== Ursache ====
Erhalten wir diesen Fehler, so dürfen wir die Directive Options nicht überschreiben und können auch nicht die benötigten Optionen einfügen. In der error_log-Datei steht dazu:
[alert] [client ...] /www/htdocs/web999/.htaccess: Options not allowed here
==== Lösung ====
Ohne Zugriff auf die **httpd.conf** kann man hier nichts machen. Auch hier müssten wir wieder den Provider kontaktieren und ihn bitten, die Options **FollowSymlinks** oder **SymLinksIfOwnerMatch** in der Server-Config für unser Directory freizuschalten.
Dazu muss in dem -Abschnitt für unsere htdocs, also bspw.
Options +FollowSymlinks
einfügt bzw. die vorhandene Options Direktive ergänzt werden.
==== Ursache ====
Manche WebHoster benötigen die Angabe der RewriteBase Direktive, da diese nicht in der Webserverkonfiguration angegeben wurde.
==== Lösung ====
In der //.htaccess// Datei muss folgendes hinzugefügt werden:
RewriteBase /
Wenn Sefrengo in einem Unterverzeichnis installiert ist, muss evtl. noch der Pfad angepasst werden.
===== Zusammenfassung =====
Haben wir eine Version der o.g. .htaccess-Datei korrekt zum Laufen gebracht, so sind die ersten beiden Zeilen der standardmäßig von Sefrengo mitgelieferten htaccess.txt entprechend anzupassen. Danach löschen wir unsere o.g. Test-Version der .htaccess-Datei und benennen die mitgelieferte Version von //htaccess.txt// in //.htaccess// um.
Gutes Gelingen!
===== Quellen =====
* [[http://www.modrewrite.de/foren/ftopic82.html|http://www.modrewrite.de/foren/ftopic82.html]]
* Smail