Regeln für den Server mit der Datei .htaccess festlegen
Viele Webseiten werden im Internet auf Linux-basierten Betriebssystemen mit einem Apache-Webserver betrieben. Der Webserver wird dabei mit einer Konfiguration betrieben, die vom Webhoster bzw. dem zuständigen Administrator festgelegt wird. Die zentrale Konfiguration geschieht üblicherweise über die Datei httpd.conf sowie evtl. weiteren Dateien, auf die nur der Administrator des Servers Zugang hat. Insbesondere werden damit sicherheitsrelevante Einstellungen festgelegt, die global für alle Webseiten gelten, die mit dem Webserver betrieben werden.
Ein Webserver ist so ausgelegt, dass Webseiten mehrerer Domains damit gehostet werden können. Wenn man z.B. Speicherplatz im Internet mietet, dann bekommt man im Regelfall auf einem Server Speicherplatz zugewiesen, auf dem die Webseiten von weiteren Kunden des Webhosters gehostet werden. Man teilt sich quasi den Server mit den anderen Kunden.
Globale Einstellungen, die für alle Webseiten gelten, müssen auf das Nötigste reduziert werden, weil für jede Domain oder sogar für jedes Verzeichnis andere Einstellungen notwendig sein können. Beispielsweise kann es sein, dass man für ein Verzeichnis ausländische Besucher oder bestimmte Suchmaschinen sperren möchte, für andere jedoch nicht.
Damit man auf der Verzeichnisebene Regeln festlegen kann, die vom Apache Webserver beachtet werden, gibt es eine Datei mit dem Namen .htaccess. Der Punkt vor dem Namen gehört dazu und bewirkt, dass auf Servern mit dem Linux-Betriebssystem die Datei normalerweise nicht sichtbar ist, wenn der Verzeichnisinhalt angezeigt wird.
![Datei .htaccess Datei .htaccess](typo3temp/fl_realurl_image/datei-htaccess-f6.jpg)
So kann man in jeden Ordner eine eigene .htaccess-Datei ablegen und individuelle Regeln für den Ordner festlegen. Dabei gilt der Grundsatz, dass nur die Einstellungen eine Wirkung zeigen, die gemäß der Serverkonfiguration auch freigegeben wurden bzw. überschrieben werden können. Es ist nicht möglich, die Einstellungen in der zentralen Konfiguration zu überschreiben, die gesperrt wurden. So können insbesondere sicherheitsrelevante Einstellung nicht einfach mit der .htaccess-Datei ausgehebelt werden. Wenn z.B. in der Serverkonfiguration festgelegt wurde, den Zugriff von einer bestimmten IP-Adresse nicht zuzulassen, diese Einstellung gegen Überschreibung gesperrt wurde, dann kann man für eine Domain bzw. für einen Ordner die IP-Adresse mittels .htaccess-Datei nicht freigeben. Welche Einstellungen möglich sind, muss beim Webhoster erfragt werden.
Vererbung der .htaccess-Einstellungen
Ein Ordner kann weitere Unterordner enthalten. Im Grunde kann jeder Ordner eine eigene .htaccess-Datei enthalten. Das ist aber im Normalfall nicht nötig. Wenn ein Ordner eine .htaccess-Datei enthält, dann gilt dieser für den Ordner und den darin enthaltenen Unterordnern, da die Regeln auch auf die Unterordner weiter vererbt werden. Die Weitervererbung gilt so weit, bis eine Regel neu definiert bzw. durch eine neue Regel aufgehoben wird.
Falls es erforderlich ist, dass für einen Unterordner die Vererbung nicht angewendet wird, muss man die betreffende Regel durch eine neue Regel außer Kraft setzen. Falls gegensätzliche Regeln vorhanden sind, heben die Regeln in den Unterordnern die darüber liegenden Regeln auf. Man sollte sehr sparsam mit den .htaccess-Dateien umgehen, da diese bei jedem Aufruf einer Datei aus dem betreffenden Ordner sowie den Unterordnern ausgewertet werden. Bei sehr vielen .htaccess-Dateien kann der Server bzw. die Auslieferung der Webseiten verlangsamt werden.
![Vererbung der .htaccess-Regeln Vererbung der .htaccess-Regeln](typo3temp/fl_realurl_image/vererbung-der-htaccess-regeln-2e.jpg)
.htaccess-Datei anzeigen lassen
Bevor man Einstellungen über die .htaccess-Datei vornehmen möchte, sollte man sich die bestehende Datei anzeigen lassen und ggf. sichern. Es kann nämlich durchaus sein, dass auf dem Server bereits eine Datei vorhanden ist und wichtige Einstellungen enthält.
Wählt man sich über FTP auf dem Server ein, sollte etwaige .htaccess-Dateien im Hauptverzeichnis und ggf. in den Unterordnern angezeigt werden. Falls diese existieren, jedoch nicht angezeigt werden, muss man evtl. die Ansicht versteckter Dateien FTP-Programm einschalten.
![.htaccess-Datei anzeigen .htaccess-Datei anzeigen](typo3temp/fl_realurl_image/htaccess-datei-anzeigen-d2.jpg)
.htaccess-Datei erstellen
Die .htaccess-Datei kann auf verschiedenen Wegen erstellt werden. Die einfachste Möglichkeit ist, sofern das unterstützt wird, die Datei direkt über das FTP-Programm zu erstellen und hochzuladen. Ansonsten kann die Datei auch mit jedem beliebigen Texteditor erstellt werden, z.B. mit dem in Windows integrierten Editor. Beim Speichern muss man evtl. darauf achten, den Dateityp auf "Alle Dateien" umzustellen, da es ansonsten sein könnte, dass eine Textdatei mit der Dateiendung .txt erstellt wird. Die .htaccess-Datei hat jedoch keine Dateiendung und .htaccess ist (in der Standardkonfiguration des Apache-Webservers) der gültige Name der Datei.
![.htaccess-Datei erstellen .htaccess-Datei erstellen](typo3temp/fl_realurl_image/htaccess-datei-erstellen-e4.jpg)
![.htaccess-Datei speichern .htaccess-Datei speichern](typo3temp/fl_realurl_image/htaccess-datei-speichern-d5.jpg)
Kommentare und Eingabe der Befehle
Die Befehle werden zeilenweise in den Texteditor eingegeben. Man sollte sich von Anfang an angewöhnen, mit Kommentaren zu arbeiten, da die Befehle auf dem ersten Anblick nicht unbedingt verständlich sind. In der Regel beginnt man mit einfachen Regeln und baut die .htaccess-Datei nach und nach aus, so dass diese durchaus Tausend Zeilen groß oder länger sein können. Wenn man dann nach einiger Zeit nachschaut, sind die einzelnen Zeilen ohne Kommentare sehr schwer nachzuvollziehen. Insbesondere wenn reguläre Ausdrücke verwendet werden, weiß man oft nicht auf Anhieb, was mit dem Befehl bezweckt werden soll und die Entschlüsselung einer einzigen Zeile kann viel Zeit in Anspruch nehmen.
Kommentare werden zeilenweise mit einem Raute-Zeichen (#) eingegeben. Der Rest der Zeile gilt als Kommentar und wird vom Webserver bei der Auswertung nicht beachtet. Ein Beispielkommentar:
# .htaccess Auslesen verhindern
Der Übersichtlichkeit halber erstrecken sich Kommentare häufig über mehrere Zeilen. So kann man einzelne Bereiche besser voneinander unterscheiden. Beispiel:
#################################
# .htaccess Auslesen verhindern #
#################################
Da alle drei Zeilen mit einer Raute (#) beginnen, sind alle drei Zeilen lediglich Kommentare.
Gültigkeitsbereiche der Direktiven
Die Direktiven werden häufig, jedoch nicht immer, innerhalb bestimmter Gültigkeitsbereiche eingegeben. So kann man die Direktiven auf bestimmte Bereiche eingrenzen. Ein Gültigkeitsbereich wird in spitzen Klammern eingegeben. Das Ende erfolgt ebenfalls in spitzen Klammern, jedoch mit einem Schrägstrich nach der öffnenden spitzen Klammer. Ein Beispiel:
<Files .htaccess>
deny from all
</Files>
Diese drei Zeilen unterbinden den Zugriff auf die Datei .htaccess. Die Bedeutung der einzelnen Zeilen:
- Mit <Files .htaccess> wird der Gültigkeitsbereich auf die Datei .htaccess beschränkt. Alle übrigen Dateien bleiben von der folgenden Direktive unberücksichtigt.
- deny from all ist die Direktive, die auf die Datei .htaccess angewendet wird. Es bedeutet, dass allen kein Zugriff gewährt wird. Man könnte hier z.B. statt all eine IP-Adresse eintragen und den Zugriff von der IP-Adresse blockieren.
- Mit </Files> wird der Gültigkeitsbereich beendet.
Statt die Direktiven auf einzelne Dateien zu beschränken, könnte man diese z.B. auch auf alle Dateien oder bestimmte Dateitypen beschränken. Beispielsweise wird mit <Files *> (mit einem Sternzeichen) angegeben, dass der Gültigkeitsbereich sich auf alle Dateien erstreckt. Um die Direktiven auf bestimmte Dateitypen anzuwenden, könnte man diese mit einem Sternzeichen und der folgenden Dateiendung angeben, z.B. <Files *.jpg> für Dateien mit der Dateiendung .jpg. Auf jeden Fall sollte nicht vergessen werden, jeden Gültigkeitsbereich wieder zu schließen.
Weitere Gültigkeitsbereiche
Die Gültigkeitsbereiche lassen sich nicht nur auf Dateien beschränken. Beispielsweise könnte man die Direktiven nur für den Fall anwenden, wenn ein bestimmtes Apache-Modul verfügbar ist, z.B. werden die Direktiven innerhalb von <IfModule mod_rewrite.c> nur dann angewendet, wenn das Apache-Modul mod_rewrite geladen ist.