Die .htaccess-Datei

  1. Was ist eine .htaccess-Datei?
  2. Funktionsweise
  3. Aufbau
  4. Dateirechte
  5. SSI-Tags in .htm oder .html-Dateien?
  6. .htm oder .html-Dateien wie PHP-Dateien behandeln?
  7. Reihenfolge der Indexdateien ändern
  8. Angepasste Fehlermeldungen
  9. Verschlüsselte Übertragung erzwingen
  10. Passwortgeschützte Webseiten
  11. Umleitung
  1. 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.

  2. 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.

  3. 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-Datei
  4. Welche 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.

  5. 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-Datei

      In 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

  6. 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-Datei

    Siehe 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.

  7. 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-Datei

    Das 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.

  8. 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-Datei
  9. Verschlü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.

  10. 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-Datei

  11. Umleitung

    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. Oder temp, wenn nur befristet, seeother oder gone.
    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-Datei

    Damit 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