.htaccess - das Schweizer Taschenmesser des Apache

Es gibt 8 Antworten in diesem Thema, welches 1.953 mal aufgerufen wurde. Der letzte Beitrag () ist von HostBuster.

  • .htaccess ist eine Konfigurationsdatei auf NCSA-kompatiblen Webservern wie Apache, in der verzeichnisbezogene Regeln aufgestellt werden können. Webmaster können mithilfe der Konfigurationsdatei z.B. verzeichnisbezogene Regeln aufstellen. So kann beispielsweise festgelegt werden, welche Benutzer auf bestimmte Dateien zugreifen dürfen.


    Mit der .htaccess Datei lassen sich die Einstellungen des Apache Webservers konfigurieren: Zugriffsschutz, Sperrungen, Weiterleitungen, Fehlermeldungen - kurz das Schweizer Taschenmesser für die Konfiguration des Apache Web Servers.


    Eine .htaccess Datei befindet sich in der Regel im Basisverzeichnis einer Webseite (das Verzeichnis, das in den Domain Einstellungen als Zielpfad eingetragen ist). Die Einstellungen sind im aktuellen Verzeichnis und allen Unterverzeichnissen wirksam - solange diese nicht mit einer .htaccess Datei in einem Unterverzeichnis überschrieben werden.


    Die .htaccess Datei wird bei jedem Aufruf des Apache Webservers und für jede einzelne Datei der Webseite ausgewertet. Wenn eine Seite aus 1 HTML Datei, 5 CSS Dateien, 10 Javascript Dateien und 40 Bildern/Icons besteht, wird die .htaccess Datei beim Aufruf der Webseite also 56 mal durchlaufen. Dabei ist der Webserver sehr pingelig was die korrekte Syntax der Einträge angeht. Der kleinste Fehler führt in der Regel zu einem "Server Error 500". Daher sollte nach jeder Änderung an der .htaccess Datei geprüft werden, ob die Webseite noch aufgerufen werden kann bzw. korrekt funktioniert, denn diese Fehler werden nicht protokolliert.

  • HostBuster

    Hat das Thema geschlossen
  • Weiterleitungen (Redirects)

    Die Weiterleitung von Domains und Anfragen zu einzelnen Webseiten ist eine der Hauptanwendungen der .htaccess Datei. Das notwendige Apache Modul mod_rewrite ist dafür Voraussetzung.


    Die Weiterleitung muss jedoch in der .htaccess Datei zunächst mit folgendem Eintrag aktiviert werden (bitte darauf achten, dass diese Zeile nur ein Mal in der .htaccess vorhanden sein darf):


    RewriteEngine On


    Der Weiterleitung (Redirect) sollte man noch einen Statuscode mitgeben: 301 oder 302. Der Unterschied:

    • 301: Die Weiterleitung ist dauerhaft, z.B. weil die Navigationsstruktur einer Webseite umgestellt wurde. So wird in Suchmaschinen auf Dauer nur diese angezeigt.
    • 302: Die Weiterleitung erfolgt nur vorübergehend, anschließend gilt wieder die bisherige Adresse.

    Am Ende der RewriteRule Zeile wird der Code für die Weiterleitung (Redirect) in eckigen Klammern angegeben. Mit dem zusätzlichen Parameter L (Letzter, Last) kann man festlegen, dass die weiteren Anweisungen in der .htaccess Datei ignoriert werden, wenn diese Regel zutrifft. Hierzu ein Beispiel:


    RewriteRule ^neues\.html$ /aktuelles.html [R=301,L]


    Damit wird die Seite domain.tld/neues.html dauerhaft auf domain.tld/aktuelles.html weitergeleitet.


    Die Schreibweise der Rewrite Regeln basiert dabei auf "Regulären Ausdrücken" (Regular Expressions, regex). Mit den Zeichen ^ und $ wird der Anfang und das Ende der umzuleitenden Seite gekennzeichnet. Der Punkt . steht in regulären Ausdrücken für ein beliebiges Zeichen, wenn wir wirklich einen Punkt meinen, dann wird dies mit einem Backslash \ gekennzeichnet (\ bedeutet also: exakt das nächste Zeichen).

  • Domain Referrer umleiten

    Folgender Eintrag kann benutzt werden, um Besucher von einer bestimmten Domain auf eine bestimmte Seite umzuleiten:

    Apache Configuration
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} ^http://domain1.com [NC]
    RewriteCond %{HTTP_REFERER} ^http://www.domain1.com [NC]
    RewriteRule ^(.*)$ http://www.domain2.com/test.html [L,R]
  • Directory Listing

    Soll über einer geschützen Unterseite (z.B. fileadmin/downloads) des Internetauftritts ein Directory Listing realisiert werden, dann sollte die .htaccess wie folgt eingestellt werden:


    Apache Configuration
    AuthType Basic
    AuthName "system - "
    Options +Indexes
    IndexOptions +FancyIndexing
    AuthUserFile /*dein_serverpfad/projektpfad/filadmin/downloads/.htpasswd
    AuthGroupFile /dev/null
    require valid-user

    * dein_serverpfad befindet sich i.d.R. im Kundenmenu unter z.B. Technische Infos oder durch Eingabe des Befehls $PWD in der Shell.


    Der User mit verschlüseltem Passwort muss in dem Fall in der .htpasswd vorhanden sein.


    Die Unterseite mit dem Directory Listing muss von der index.php ausgeschlossen werden und dies erreicht man über die .htaccess in dem Projektverzeichnis mit folgenden Angaben nach der RewriteEngine On:

    Apache Configuration
    RewriteRule ^fileadmin/downloads/$ - [L]
    RewriteRule ^fileadmin/downloads/.*$ - [L]
  • IP Adressen sperren

    Manchmal ist es notwendig, z.B. bei einem Angriffsversuch auf die Webseite, bestimmte IP-Adressen vom Aufruf der Webseite auszusperren. Über den folgenden Eintrag in der .htaccess Datei (vor dem Eintrag 'RewriteEngine On') im Startverzeichnis der Seite lassen sich unerwünschte Besucher abweisen:

    Code
    order allow,deny 
    deny from 192.168.2.1
    deny from 10.10.10.10
    allow from all

    Bei mehreren IP Adressen wird jede in eine eigene Zeile eingetragen. Die Einstellung ist auch für alle Unterverzeichnisse gültig. Versucht jemand mit einer gesperrten Adresse die Seite aufzurufen erhält er dadurch einen 403 Fehlercode (Zugriff verweigert).

  • Passwortschutz

    Mit der .htaccess lässt sich relativ einfach ein Passwortschutz für die komplette Webseite, bestimmte Verzeichnisse oder einzelne Dateien realisieren. Dazu benötigt man neben der .htaccess die Datei .htpasswd, die Benutzernamen mit den dazugehörigen verschlüsselten Passwörter enthält.


    Falls schon eine .htaccess vorhanden ist, muss diese ergänzt werden, wobei die zusätzlichen Codezeilen am Anfang der Datei gemacht werden müssen bzw. vor eventuell vorhandenen Rewrite Regeln, da die Einstellungen andernfalls nicht korrekt greifen.


    Inhalt der .htaccess:

    Apache Configuration
    AuthType Basic
    AuthName "Bitte authorisieren Sie sich"
    AuthUserFile /var/www/website1/.htpasswd
    require valid-user

    Mit dem Shell Befehl pwd kann man sich den kompletten Server-Pfad ausgeben lassen, denn die .htpasswd wird nur so gefunden. Also in obigem Code /var/www/website1/.htpasswd durch die Ausgabe des Befehls pwd ersetzen.


    Die Einträge bedeuten im Einzelnen:

    • AuthType Basic
      Beschreibt die Art der Authentifizierung. In der Regel wird „Basic“ ( HTTP Basic Authentication) als Authentifizierungsmethode verwendet. Das Passwort wird allerdings vom Browser unverschlüsselt an den Webeserver übertragen. Eine andere Möglichkeit wäre „Digest“ welche die Passwörter verschlüsselt überträgt, aber leider von den wenigsten Browser unterstützt wird.
    • AuthName "Bitte authorisieren Sie sich"
      Die Bezeichnung (Titel) des Abfragefensters im Browser, welche der Benutzer als kurze Beschreibung sieht.
    • AuthUserFile /var/www/website1/.htpasswd
      Pfad zur .htpasswd Datei, welche die User- und Passwortinformationen zur Authentifizierung enthält.
    • Require valid-user
      Beschreibt welche User aus der .htpasswd Datei Zugriff erhalten. Das können wie bei unserem Beispiel (valid-user) alle Benutzer in der .htpasswd sein, oder nur bestimmte angeführte User (Require user benutzer1 benutzer2)

    Um die .htpasswd Datei zu erstellen gibt es mehrere Möglichkeiten, wie z.B. Online-Generatoren, die jedoch kritisch zu betrachten sind. Man ist gezwungen den Benutzername und das Kennwort in ein fremdes Formular einzugeben, ohne zu wissen, was letztendlich damit passiert. Eher ratsam sind Tools, die auf dem eigenen Rechner offline arbeiten oder Scripte, die man nach Gebrauch vom Server löscht.


    Aus diesem Grund empfiehlt sich folgende Vorgehensweise:

    Mit dem Unix Befehl htpasswd (auf manchen Systemen auch htpasswd2) kann man dies einfach erledigen. Ein exemplarischer Aufruf würde dann so ausschauen:


    htpasswd -cm ./.htpasswd benutzername


    Anschließend wird man aufgefordert ein Password inkl. Wiederholung einzugeben. Wenn danach weitere User hinzugefügt werden, darf auf keinen Fall die Option -c (create new file = Neue Datei erstellen) gesetzt sein, sonst wird die Datei ohne Nachfrage überschrieben. Das -m bedeutet, dass das Passwort mit MD5 verschlüsselt in die Datei geschrieben wird.


    htpasswd -m ./.htpasswd weitererbenutzername


    Um zu Testen ob alles erfolgreich war, braucht man einfach nur die geschützte URL im Browser aufrufen. Wenn dort eine Dialogbox zum Einloggen angezeigt wird und der Login funktioniert ist der Schutz schon eingerichtet. Falls ein "Server Error 500" Ausgegeben wird, ist dies mit sehr großer Wahrscheinlichkeit auf einen Syntax Fehler in der .htaccess bzw. .htpasswd zurückzuführen.


    In der Regel sollte die .htpasswd ausserhalb des Webserver Verzeichnisses liegen. Auf vielen Managed Servern ist das allerdings nicht möglich.

  • Nur 1 User Agent zulassen

    Wenn z.B. nur der User Agent Lycos/2.8.2dev.12 erlaubt sein soll, sieht der .htaccess Eintrag so aus:

    Apache Configuration
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} !Lynx/2\.8\.8dev\.12 [NC]
    RewriteRule ^ - [F,L]

    Alle anderen User Agent werden mit dem Fehlercode 403 abgewiesen.


    oder

    Apache Configuration
    Options +FollowSymLinks -MultiViews
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} !=myuseragent
    RewriteRule ^files/.*$ - [F,L]

    Die obige Regel weist den Apache Webserver an, jeden User Agent der nicht myuseragent entspricht, mit dem Fehlercode 403 (Access Denied) im Verzeichnis /files/ abzuweisen.


    Soll der Fehlercode 404 (File not found) ausgegeben werden, muss [F,L] mit [R=404,L] ersetzt werden.


    User Agent umleiten

    Falls solche Anfragen auf die Homepage geleitet werden sollen, ist folgender Eintrag erforderlich:

    Apache Configuration
    RewriteCond %{HTTP_USER_AGENT} !=myuseragent
    RewriteRule ^files/.*$ / [R=302,L]

    302 kann hier durch jede gewünschte Weiterleitung ersetzt werden.


    User Agent verbieten

    Zum blockieren eines User Agent (z.B. Baidu Spider) dient der Eintrag:

    Apache Configuration
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} Baiduspider [NC]
    RewriteRule .* - [F,L]

    Alternativ kann auch die BrowserMatchNoCase Apache Directive verwendet werden:

    Code
    BrowserMatchNoCase "Baiduspider" bots
    Order Allow,Deny
    Allow from ALL
    Deny from env=bots

    Um mehrere User Agent zu verbieten, dient der Eintrag:

    Apache Configuration
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} ^.*(Baiduspider|HTTrack|Yandex).*$ [NC]
    RewriteRule .* - [F,L]

    oder, alternativ, mit der BrowserMatchNoCase Apache Directive:

    Code
    BrowserMatchNoCase "Baiduspider" bots
    BrowserMatchNoCase "HTTrack" bots
    BrowserMatchNoCase "Yandex" bots
    Order Allow,Deny
    Allow from ALL
    Deny from env=bots
  • Referrer erlauben/verbieten

    Um einen unerwünschten Referrer (z.B. BadDomain.com) auszusperren, ist folgender Eintrag erforderlich:

    Apache Configuration
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} BadDomain\.com [NC]
    RewriteRule .* - [F]

    oder, alternativ, mit der BrowserMatchNoCase Apache Directive:

    Code
    SetEnvIfNoCase Referer "BadDomain\.com" bad_referer
    Order Allow,Deny
    Allow from ALL
    Deny from env=bad_referer

    Sollen mehrere Referrer gesperrt werden, erreicht man dies mit folgendem Eintrag:

    Apache Configuration
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} BadDomain1\.com [NC,OR]
    RewriteCond %{HTTP_REFERER} BadDomain2\.com [NC]
    RewriteRule .* - [F]

    oder, alternativ, mit der BrowserMatchNoCase Apache Directive:

    Code
    SetEnvIfNoCase Referer "BadDomain1\.com" bad_referer
    SetEnvIfNoCase Referer "BadDomain2\.com" bad_referer  
    Order Allow,Deny
    Allow from ALL
    Deny from env=bad_referer
  • Eigene Fehlerseiten

    Kann ein Webserver eine Anfrage nicht verarbeiten so wird dem Nutzer in aller Regel eine Standard Fehlerseite des Webservers angezeigt. Wohl jeder kennt die Antwort, die er zu Gesicht im Browser bekommt: "404 Seite nicht gefunden".

    Die Standard-Fehlerseiten lassen sich in der .htaccess mit folgenden Einträgen definieren:


    Seiten innerhalb der Domain

    Code
    ErrorDocument 400 /verzeichnis/datei.html
    ErrorDocument 401 /verzeichnis/datei.html
    ErrorDocument 403 /verzeichnis/datei.html
    ErrorDocument 404 /verzeichnis/datei.html
    ErrorDocument 410 /verzeichnis/datei.html

    Seiten auf anderer Domain

    Code
    ErrorDocument 400 http://www.domain-name.tld/verzeichnis/datei.html
    ErrorDocument 401 http://www.domain-name.tld/verzeichnis/datei.html
    ErrorDocument 403 http://www.domain-name.tld/verzeichnis/datei.html
    ErrorDocument 404 http://www.domain-name.tld/verzeichnis/datei.html
    ErrorDocument 410 http://www.domain-name.tld/verzeichnis/datei.html

    Erklärung der Fehlercodes


    Code Statustext Beschreibung
    401 Unauthorized Der Benutzer benötigt eine Autorisierung, ohne die er keinen Zugriff auf die Ressource hat.
    403 Forbidden Nicht öffentlicher Bereich, auf den der Benutzer keinen Zugriff hat.
    404 Not Found URI nicht gefunden.
    410 Gone URI ist keine Ressource mehr erreichbar und es ist keine Weiterleitungsadresse bekannt.

Schon gewusst…?

"Trusted User" haben Zugang zu speziellen Bereichen, die wir, leider aus gegebener Veranlassung, nicht allen Mitgliedern unseres Boards global und augenblicklich gewähren können. Du kannst dich über dein Benutzer-Panel für die Benutzergruppe "Trusted User" bewerben. Die Zugehörigkeit zu dieser Gruppe, ist vor Ablauf von 3 Monaten leider nicht möglich. Dennoch ist diese weder von der Anzahl der Beiträge, noch von den Benutzerpunkten abhängig, sondern wird intern und individuell entschieden.