Die .htaccess-Datei
- Was ist eine .htaccess-Datei?
- Funktionsweise
- Aufbau
- Dateirechte
- SSI-Tags in .htm oder .html-Dateien?
- .htm oder .html-Dateien wie PHP-Dateien behandeln?
- Reihenfolge der Indexdateien ändern
- Angepasste Fehlermeldungen
- Verschlüsselte Übertragung erzwingen
- Passwortgeschützte Webseiten
- Umleitung
Was ist eine .htaccess-Datei?
.htaccess-Dateien sind Konfigurationsdateien für den Apache-Webserver. Sie ermöglichen, zusätzlich zur allgemeinen Serverkonfiguration, die Konfiguration für einzelne Verzeichnisse oder Dateien in den www-Verzeichnissen des Servers.
Voraussetzung für den Einsatz von .htaccess-Dateien ist, dass der Einsatz von .htaccess-Dateien in der Serverkonfiguration erlaubt worden ist. Manche Anbieter/Webhoster haben den Einsatz von .htaccess-Dateien abgeschaltet. (
AllowOverride None
)Durch .htaccess-Dateien kann man als Webspacebesitzer seine eigenen Verzeichnisse komfortabel einrichten, ohne das etwas an der globalen Webserverkonfiguration geändert werden muss. Oftmals haben Webhostingkunden selbst nicht die Rechte zur Webserverkonfiguration. Ausserdem kann man dann normalerweise nur Schaden im eigenen "Revier" anrichten und nicht eventuell den gesamten Server in den Abgrund ziehen.
Zu beachten evtl. noch, daß "."-Dateien versteckte Dateien sind, also normalerweise nicht mit ls, sondern erst mit
ls -a
sichtbar sind. Eventuell zeigt ihr FTP-Programm nur sichtbare Dateien an, falls von außen zugegriffen wird.Eine .htaccess-Datei kann in jedem Verzeichnis stehen, in dem auch html-Dateien oder Grafiken stehen können.
Funktionsweise
Die .htaccess-Datei wird bei jedem Zugriff des Server auf ein Verzeichnis oder eine Datei im und unterhalb des Verzeichnisses der .htaccess-Datei gelesen und ausgewertet. Wird z.B. von einem Nutzer die Datei "geheim.htm" im Verzeichnis "wichtig/" abgefragt, so schaut der Webserver erst in allen höher gelegenen und im Verzeichnis "wichtig/" nach einer vorhandenen .htaccess-Datei. Dabei werden alle gefundenen htaccess-Dateien ausgewertet.
Aufbau
Ein konkretes Beispiel:
# Zeiger auf angepasste Fehlermeldungen ErrorDocument 401 /~pl1/error401.html ErrorDocument 403 /~pl1/error403.html ErrorDocument 404 /~pl1/error404.phtml # Unterdrückt nervigen Extratext von phpfi (altes php). phpShowInfo off # Sorgt dafür, dass phtml-Dateien(phpfi) als index-Dateien fungieren. # Alternativ dann erst index.html usw. DirectoryIndex index.phtml index.html index.htm # Damit .htm-Dateien wie ssi-Dateien (shtm, shtml-Dateien) # behandelt werden. Dadurch aber auch langsamer, da # jede htm-Datei erst auf SSI-Tags untersucht wird. <FILES *.htm> Options Includes </FILES>
.htaccess-DateiWelche Dateirechte muss eine .htaccess-Datei besitzen?
Die Rechte einer .htaccess-Datei sollten z.B. auf
644 -rw-r--r--
stehen:chmod 644 .htaccess
Also alle dürfen lesen ("4" entspricht r--), nur der Eigentümer darf ausserdem schreibenden Zugriff ("6" entspricht rw-) auf die Datei haben. Die .htaccess-Datei lässt sich aber nicht im Browser anzeigen, da der Server die Datei als Konfigurationsdatei erkennt und die Auslieferung verständlicherweise unterbindet.
Wie ermögliche ich die Ausführung von SSI-Tags in normalen htm-, html-Dateien?
Es gibt gleich mehrere Möglichkeiten:
"Option Includes". Am besten gleich ein Beispiel:
# Option Includes sorgt dafür, dass SSI-Tags in htm-Dateien # ausgeführt werden. # Gilt ab hier für alle Unterverzeichnisse, # solange es nicht in einem Unterverzeichnis wieder aufgehoben wird. <FILES *.htm> Options Includes </FILES>
.htaccess-DateiIn diesem Falle werden alle htm-Dateien vor der Auslieferung an den Client/Browser auf enthaltene SSI-Tag gecheckt. Nachteil: Geschwindigkeit. Jede .htm-Datei wird durchsucht, auch wenn sie keine SSI-Tags enthält.
Das ominöse XBitHack. "XBitHack On". Da ich hier etwas weiter ausholen müsste verweise ich einfach mal auf http://httpd.apache.org/docs/mod/mod_include.html
Wie ermögliche ich, daß normale htm-, html-Dateien als php-Dateien behandelt werden?
Hintergrund: Sie möchten, dass ihre dynamisch generierten Seiten nach aussen wie normale HTML-Dateien ausschauen, ohne Rückschlüsse auf die Generierung zu geben.
Auch hier kann uns die .htaccess-Datei weiterhelfen:
# Handler fuer .htm und .html ueberschreiben AddType application/x-httpd-php .htm AddType application/x-httpd-php .html
.htaccess-DateiSiehe auch http://httpd.apache.org/docs/mod/mod_mime.html.
Man sollte vorher prüfen, ob der angegebene Handler (hier application/x-httpd-php) auch der richtige für PHP ist.
Beachten sollt man, dass der HTTP-Header trotzdem noch Aufschluss über die Generierung gibt. Dies kann durch eine Anpassung der php.ini (Headervariable X-Powered-By) und Apachekonfiguration (Headervariable Server) vermeiden.
Ich möchte index.phtml oder index.shtml als index-Datei und nicht index.htm!
"DirectoryIndex" ist die Lösung.
#mein DirectoryIndexeintrag, suche zuerst index.phtml DirectoryIndex index.phtml index.shtml index.html
.htaccess-DateiDas Beispiel sucht zuerst nach einer index.phtml, falls nicht vorhanden nach einer index.shtml und dann schließlich nach einer index.html-Datei. Der erste Treffer wird als Index-Datei für das Verzeichnis verwendet.
Wie kann ich angepasste Fehlermeldungen erreichen?
Einer der häufigsten Fehler, der im www auftritt, ist der sogenannte 404 Error. Er besagt, dass die angeforderte Datei nicht gefunden wurde. Oft sind falsche oder alte Links die Ursache. Die Fehlermeldung des Apacheservers ist allerdings nicht gerade aussagefähig. Die Lösung ist eine angepasste Webseite, die freundlich auf das Problem hinweist und möglichst einen erneuten Einstieg in das Webangebot bietet oder sogar zu der gesuchten Webseite führt.
# Zeiger auf angepasste Fehlermeldungen ErrorDocument 401 /~pl1/error401.html ErrorDocument 403 /~pl1/error403.html ErrorDocument 404 /~pl1/error404.phtml
.htaccess-DateiVerschlüsselte Übertragung erzwingen
Ziel: Sie möchten bestimmte Teile der Webseite nur verschlüsselt übertragen.
# HTTPS-Verschluesselung erzwingen RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ # fuer alle Dateien RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI}
In diesem Beispiel wird davon ausgegangen, dass der Server auf Port 443 auf HTTPS/SSL-Verbindungen wartet.
Passwortgeschützte Webseiten
Eine solche .htaccess-Datei in einem Verzeichnis erlaubt einen einfachen Passwortschutz für dieses und alle Unterverzeichnisse.
Beachten sollte man aber, dass die Daten und das Passwort trotzdem unverschlüsselt übertragen werden und somit von jedem Schnüffelprogramm entlang der Verbindung Server-Webbrowser mitgelesen werden können.
Lösung: HTTPS-Server verwenden.
# Konfiguration Passwortschutz AuthName "NameOfRealm" AuthType Basic AuthUserFile /path/to/the/htpasswordfile/.htpasswd require valid-user
.htaccess-DateiUmleitung
Oft sieht man den Hinweis, daß eine Web-Seite jetzt eine neue Adresse hat und wird aufgefordert auf den entsprechenden Link zu klicken.
Das ist oft überflüssig. Der Web-Server ist in der Lage, dem Browser direkt mitzuteilen, wo die neue Seite zu finden ist, ohne das zusätzliche Aktivitäten des Nutzers erforderlich wären.
Das Verhalten kann im Apache auf unterschiedliche Weise erreicht werden. In diesem Beispiel nutzen wir mod_alias, komplexere Varianten sind mit mod_rewrite möglich.
Der Eintrag in der .htaccess Datei sieht etwa so aus:
# Umleitung Redirect status woher wohin
Dabei bedeuten:
- status
- Der dem Browser signalisierte Status (bleibt in der Regel
unsichtbar). Entweder
permanent
, wenn sich die Seite endgültig weg bewegt hat. Odertemp
, wenn nur befristet,seeother
odergone
. - woher
- Pfadangabe, also z.B. /~alf/daten/x.html (keine relativen Pfade verwenden!)
- wohin
- URL der neuen Seite. Auch diese muß absolut, also mit http:// oder https:// beginnend angegeben werden, darf aber auf einen beliebigen Web-Server verweisen.
Beispiel:
# Umleitung Redirect permanent /newbigproject/index.htm https://www.example.com/
.htaccess-DateiDamit werden alle Zugriffe auf /newbigproject/index.htm nach https://www.domain.com umgeleitet.
Siehe auch http://httpd.apache.org/docs/current/mod/mod_alias.html#redirect
weitere Informationen:
www.apache.org/docs/ | Die Apache-Dokumentation |
https://www.trash.net/wissen/www/htaccess/ | htaccess-FAQ von Thomas Bader |