Anmelden
x
x
x
Registrieren
x

Downloads
Suche - SP Page Builder
Suche - Kategorien
Suche - Kontakte
Suche - Inhalt
Suche - Newsfeeds
Suche - Schlagwörter

.htaccess [http]

Stern inaktivStern inaktivStern inaktivStern inaktivStern inaktiv
 

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

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 auf verschlüsselte Verbindung umleiten

Sollen alle Seiten einer Domain ausschließlich über eine SSL-Verbindung aufgerufen werden, so kann dies über einen Eintrag in der .htaccess Datei im Startverzeichnis der Domain eingerichtet werden:

RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

In der ersten Zeile wird die Bedingung definiert "Wenn der Aufruf nicht auf Port 443 erfolgt" (Port 443 wird für SSL-Verschlüsselung verwendet, Port 80 für unverschlüsselte Aufrufe). Zeile 2 ist die Regel für das Umschreiben der URL. Wenn die Bedingung aus Zeile 1 zutrifft, werden die Aufrufe einer beliebigen Seite auf die gleiche Domain (${HTTP_HOST}) jedoch über das https:// Protokoll umgeleitet. Mit /$1 wird die ursprüngliche URL (z.B. impressum.html) an den Domainnamen angefügt.

Mit dem Parameter [L] wird angegeben, dass das Umschreiben der URLs hier enden soll, weitere Zeilen in der .htaccess Datei werden also ignoriert.
Durch den Parameter R=301 erfolgt dabei die Umleitung mit dem Statuscode 301 (permanent), so dass auch in Suchmaschinen auf Dauer nur diese erscheint.

Domain Referrer umleiten

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

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]

Anker auf einer Seite

Auf einer Webseite können "Anker" als Sprungmarke gesetzt sein. Beim Aufruf wird im Browser nicht auf den Anfang der Seite sondern direkt zum Ankerpunkt gesprungen. Der Anker wird durch ein Hash-Zeichen # in der URL gefolgt vom Namen der Sprungmarke gekennzeichnet. Beispiel für eine Adresse mit Anker:

domain.tld/aktuelles.html#artikel25

Soll per .htaccess Weiterleitung direkt auf eine Sprungmarke verwiesen werden, muss der zusätzliche Parameter NE (No Encoding) in eckigen Klammern angegeben werden:

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

Bei einer Domain immer www. entfernen

Mit folgendem Eintrag in der .htaccess Datei werden alle Aufrufe für eine Domain mit www auf die Variante ohne www weitergeleitet:

RewriteCond %{HTTP_HOST} ^www.name-der-domain\.de$ [NC]
RewriteRule ^(.*)$ http://name-der-domain.de/$1 [R=301,L]

Die Weiterleitung nach name-der-domain.de erfolgt dabei mit dem Statuscode 301 (permanent), so dass auch in Suchmaschinen auf Dauer nur diese erscheint.

Einer Domain immer www. hinzufügen

Mit folgendem Eintrag in der .htaccess Datei werden alle Aufrufe für eine Domain ohne www auf die Variante mit www weitergeleitet:

RewriteCond %{HTTP_HOST} ^name-der-domain\.de$ [NC]
RewriteRule ^(.*)$ http://www.name-der-domain.de/$1 [R=301,L]

Die Weiterleitung nach www.name-der-domain.de erfolgt dabei mit dem Statuscode 301 (permanent), so dass auch in Suchmaschinen auf Dauer nur diese erscheint.

Domain name-of-domain.net nach name-der-domain.de umleiten

Oft werden für ein Projekt mehrere Domains registriert, um verschiedene Schreibweisen abzudecken. Nach außen wird nur eine Hauptdomain kommunziert (Beispiel: name-der-domain.de als Hautpdomain, dazu name-of-domain.net als Zusatzdomain). 

Mit folgendem Eintrag in der .htaccess Datei werden alle Aufrufe für name-of-domain.net nach name-der-domain.de weitergeleitet:

RewriteCond %{HTTP_HOST} ^(www\.)?name-of-domain\.net$ [NC]
RewriteRule ^(.*)$ http://www.name-der-domain.de/$1 [R=301,L]

Die Weiterleitung nach name-der-domain.de erfolgt dabei mit dem Statuscode 301 (permanent), so dass auch in Suchmaschinen auf Dauer nur diese erscheint. Dadurch werden Probleme mit "doppeltem Inhalt" (Duplicate Content) vermieden. Alle bei der ursprünglichen Domain übermittelten Parameter werden an die Zieldomain weitergegeben.

Domain auf eine Seite leiten

Bestimmte Domains oder Subdomains sollen entweder mit oder ohne www auf eine bestimmte Unterseite weitergeleitet werden.

Dazu wird folgende Zeilen in die .htaccess eingefügt:

mit realurl/simulatestatic und .html Suffix:

RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de
RewriteRule ^$ /unterseite.html

mit realurl ohne .html Suffix:

RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de
RewriteRule ^$ /unterseite/

ohne realurl:

RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de
RewriteRule ^$ /index.php?id=85

Weiterleitung auf eine andere Domain zu einer Unterseite

RewriteCond %{HTTP_HOST} ^(www\.)?name-of-domain\.net [NC]
RewriteRule ^(.*)$ http://www.name-der-domain.de/unterseite.html [R=301,L]

Parameter aus der URL entfernen

Manchmal möchte man einen Parameter aus einer URL entfernen, z.B. wenn es von einer ursprünglich mehrsprachigen Seite nur noch die Standardsprache gibt. Wenn Google dann eine Seite wie hal9k.de/index.php?id=289&L=1 aufruft, kann man die URL umleiten zu hal9k.de/index.php?id=289. Das lässst sich mit folgendem Eintrag in der .htaccess Datei erreichen:

RewriteCond %{QUERY_STRING} ^(.+?&|)L=[^&]*(?:&(.*)|)$ [NC]
RewriteRule ^ %{REQUEST_URI}?%1%2 [R=301,L]

Der zu entfernende Parameter (hier L=) wird muss in der ersten Zeile angepasst werden.

Redirect mit ? in der URL

http://www.domainname.de/index.php?id=7

soll nach

http://www.domainname.de/impressum.html

umgeleitet werden. Das Problem ist das ? in der alten URL. Dieses muss per QUERY_STRING in der Condition abgefragt werden.

Lösung:

RewriteCond %{QUERY_STRING} ^id=7$
RewriteRule ^.*$ http://www.name-der-domain.de/impressum.html? [R=301,L]

Wichtig ist auch der Browser-Cache. Dieser sollte unbedingt geleert werden, denn wenn ein Aufruf noch im Cache vorhanden ist kommt man dadurch unter Umständen weiterhin auf die falsche Seite.So verhindert man, dass alte, durch einen Umzug oder Neuprogrammierung, nicht mehr vorhandene URLs in den Suchmaschinen zu einem schlechteren Ranking führen.

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:

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

* ihr_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:

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:

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

HTML5 Videos zulassen

Falls es in einzelnen Browsern zu Problemen beim Abspielen von per HTML5 eingebundenen Videos kommt, helfen eventuell folgende Zeilen in der .htaccess Datei im Projektverzeichnis:

AddType video/ogg .ogm
AddType video/ogg .ogv
AddType video/ogg .ogg
AddType video/webm .webm
AddType audio/webm .weba
AddType video/mp4 .mp4
AddType video/x-m4v .m4v

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

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.

User Agent erlauben/verbieten

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:

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

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:

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:

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

Alternativ kann auch die BrowserMatchNoCase Apache Directive verwendet werden:

BrowserMatchNoCase "Baiduspider" bots

Order Allow,Deny
Allow from ALL
Deny from env=bots

Um mehrere User Agent zu verbieten, dient der Eintrag:

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

oder, alternativ, mit der BrowserMatchNoCase Apache Directive:

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:

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

oder, alternativ, mit der BrowserMatchNoCase Apache Directive:

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:

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

oder, alternativ, mit der BrowserMatchNoCase Apache Directive:

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

ErrorDocument 400 /verzeichnis/datei.html
ErrorDocument 401 /verzeichnis/datei.html
ErrorDocument 403 /verzeichnis/datei.html
ErrorDocument 404 /verzeichnis/datei.html
ErrorDocument 500 /verzeichnis/datei.html

Seiten auf anderer Domain

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 500 http://www.domain-name.tld/verzeichnis/datei.html

Erklärung der Fehlercodes

FehlercodeStatustextBeschreibung
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 Die Ressource wurde unter dem angegebenen URI nicht gefunden.
410 Gone Unter dem angegebenen URI ist keine Ressource mehr erreichbar und es ist keine Weiterleitungsadresse bekannt.

 

Wir bemühen uns, ihnen alle Informationen zu bieten, sichere und angenehme Zeiten im Internet zu verbringen. Dazu gehören neben grundsätzlichen Tipps vor allem Hinweise zum richtigen Umgang mit diesem für viele neuen Medium.

KURZ URL

Oft ist eine URL lang und nur sehr schwer zu merken (z.B. Downloads). Mit dem Short URL Service erstellt man schnell eine einprägsame und aussagekräftige URL mit vielen Extras!

HAL9k btnFly2 ShortURL

HTACCESS GENERATOR

Eine korrekte .htaccess von Hand zu erstellen ist recht mühsam und zeitaufwendig. Mit dem .htaccess Generator lässt sich diese Aufgabe schnell und zuverlässig online erledigen!

HAL9k btn.htaccess Generator