Aus Performance Sicht sollte man den Einsatz von .htaccess Dateien deaktivieren. Arbeitet man mit .haccess Dateien, werden vom Webserver (Apache) alle Verzeichnisse rekursiv innerhalb des Document Root nach einer eventuell existierenden .htaccess Datei gesucht. Dies kann sehr viele Zugriffe auf das Dateisystem bedeutet, vor allem wenn mit vielen Unterverzeichnissen gearbeitet wird.

Wenn mit Netzwerk-Dateisystem wie NFS oder Samba gearbeitet wird, sollte das deaktivieren der .htaccess Datei ein Muss sein, weil sonst mit erheblichen Geschwindigkeitseinbußen gerechnet werden muss. Dawid Golunski hat festgestellt, dass er 6.6% mehr Requests verarbeiten kann, wenn er .htaccess Dateien deaktiviert.

Wie geht man also nun vor? Falls man bestehende .htaccess Dateien hat, verlagert man deren Inhalt in die vhost Konfigurationdatei. Für jedes Verzeichnis, welches eine .htaccess Datei enthalten hat, legt man einen Abschnitt in der vhost Datei an.

Deaktivieren der .htaccess Dateien:

<Directory /path/to/DocumentRoot/>
  AllowOverride None
</Directory>

Wird AllowOverride auf das DocumentRoot Verzeichnis des vhost gesetzt, werden alle bestehenden .htaccess Dateien ignoriert. Vorsicht! Falls man mit kennwortgeschützten Verzeichnissen arbeitet, muss unbedingt entsprechend die vhost Datei angepasst werden!

Drupal mit deaktivierten .htaccess Dateien

Als Beispiel für den Betrieb ohne .htaccess Dateien gehe ich nun auf das CMS System Drupal ein.

Hier eine typische vhost Datei für Drupal:

<VirtualHost *>
    ServerName meinedomain.de
    ServerAlias www.meinedomain.de

    DocumentRoot /www/meinedomain.de/htdocs
    DirectoryIndex index.php

    php_admin_value open_basedir "/www/meinedomain.de/htdocs:/www/meinedomain.de/tmp"
    php_admin_value include_path "."
    php_admin_value upload_tmp_dir "/www/meinedomain.de/tmp"
    CustomLog /var/log/apache2/meinedomain_access.log combined env=!gif-image
    ErrorLog /var/log/apache2/meinedomain_error.log
    Options FollowSymLinks MultiViews

    <Directory /www/meinedomain.de/htdocs/>
      AllowOverride None
      Order allow,deny
      allow from all
      Include /www/meinedomain.de/htdocs/.htaccess
    </Directory>
</VirtualHost>

Durch den Trick, dass hier ein Include verwendet wird, wird der Inhalt der .htaccess Datei in die vhost Datei eingebunden (ohne dass man deren Inhalt kopieren muss). Besonders für Multi-Site Drupal Projekte ist das inkludieren der Standard-Werte sehr interessant, da man so nicht für jeden vhost eine Kopie des Inhaltes anlegen muss (und dadurch schwer pflegbar wird). Einstellungen, die einen speziellen vhost betreffen, schreibt man direkt in die vhost Datei.

Anmerkung: Beim Einsatz von .htaccess Dateien wird eine Änderung, die darin gemacht wird, sofort aktiv. Eine Änderung in einer vhost Konfigurationsdatei erfordert immer einen Reload des Webserver, damit die Änderungen aktiv werden!

Aktualisiert: