Servereinstellungen per .htaccess
Das Schweizer Taschenmesser für die Konfiguration des Webservers
Mit der .htaccess Datei lassen sich die Einstellungen des Apache Webservers konfigurieren: Zugriffsschutz, Sperrungen, Weiterleitungen, Fehlermeldungen. Auf dieser Seite beschreiben wir die gebräuchlichsten Einstellungen.
.htaccess - Allgemeine Infos
Eine .htaccess-Datei ist eine Konfigurationsdatei für den Apache-Webserver, die in einem Verzeichnis abgelegt wird, um serverseitige Einstellungen spezifisch für dieses Verzeichnis und seine Unterverzeichnisse zu ändern. Sie wird oft genutzt, um URL-Umschreibungen (Rewrite-Rules), Zugriffsrechte, Passwortschutz oder Umleitungen (Redirects) einzurichten. Dadurch können Webentwickler einfache Konfigurationsänderungen ohne direkten Zugriff auf die Hauptserverkonfiguration vornehmen. Bei Nginx-Servern werden hingegen keine .htaccess-Dateien verwendet; diese Aufgaben werden durch die Serverkonfigurationsdateien (üblicherweise nginx.conf) übernommen.
Eine .htaccess Datei befindet sich in der Regel im Startverzeichnis einer Webseite (das Verzeichnis, das in den Domain Einstellungen als Zielpfad eingetragen ist, auch als DOCROOT bezeichnet).
Die Einstellungen sind im aktuellen Verzeichnis und allen Unterverzeichnissen wirksam. Mit einer .htaccess Datei in einem Unterverzeichnis lassen sich jedoch Einstellungen überschreiben.
Die .htaccess Datei wird bei jedem Aufruf des Apache Webservers und für jede einzelne Komponente 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.
Der Webserver ist übrigens sehr pingelig was die korrekte Schreibweise, die Syntax, der Einträge angeht. Der kleinste Fehler führt in der Regel zu einem "Server Error 500". Daher muss nach jeder Änderung an der .htaccess Datei geprüft werden, ob die Webseite noch aufgerufen werden kann.
Bei Fragen zur Konfiguration einer .htaccess-Datei können sich unsere Hosting-Kunden gerne an unseren Support unter hosting@jweiland.net wenden. Unser Team hilft Ihnen gerne weiter!
Weiterleitungen (Redirects)
Um Weiterleitungen in einer .htaccess-Datei zu aktivieren, muss die Rewrite-Engine eingeschaltet werden. Dies geschieht mit folgendem Befehl:
RewriteEngine On
Diese Zeile muss vor allen Rewrite-Regeln stehen, damit die Weiterleitungen funktionieren.
Die verschiedenen Arten der Weiterleitung
Je nach Anwendungsfall, können Weiterleitungen mit unterschiedlichen Statuscodes erfolgen:
- 301 (Moved Permanently): Diese Weiterleitung signalisiert, dass sich die Adresse der Seite dauerhaft ändert. Sie wird von Suchmaschinen interpretiert, dass ein bestehender Eintrag im Suchindex eine neue Adresse erhalten hat.
- 302 (Found): Temporäre Weiterleitung. Sie sollte verwendet werden, wenn der Umzug oder die Änderung nur vorübergehend ist, z. B. während Wartungsarbeiten oder Tests. Suchmaschinen behalten die alte URL in ihrem Index.
- 307 (Temporary Redirect): Funktioniert ähnlich wie 302, garantiert jedoch, dass die HTTP-Methode (z. B. POST) unverändert bleibt. Dies ist hilfreich bei Weiterleitungen, die Formulareingaben verarbeiten.
- 308 (Permanent Redirect): Ähnlich wie 301, wird jedoch ebenfalls die ursprüngliche HTTP-Methode beibehalten. Diese Weiterleitung ist nützlich, wenn der Inhalt dauerhaft umzieht, aber spezifische Methoden nicht verändert werden dürfen, z. B. bei bestimmten API-Aufrufen.
Der gewünschte Statuscode wird am Ende des Befehls RewriteRule in eckigen Klammern angegeben, z.B. [R=301,L]
Hinweise zur Performance von Weiterleitungen
Die Abarbeitung einer .htaccess-Datei durch den Apache-Webserver erfolgt extrem schnell und benötigt in der Regel nur wenige Mikrosekunden pro Anfrage. Dadurch sind .htaccess-Regeln sehr effizient, insbesondere bei einfachen Weiterleitungen.
Alternativ können für Weiterleitungen in TYPO3 auch das Redirect-Modul im Backend verwendet werden. Dabei wird jedoch das gesamte TYPO3-Framework geladen, was einige hundert Millisekunden in Anspruch nehmen kann. Dies kann insbesondere bei hoher Zugriffszahl zu einer erhöhten Serverlast führen. Es empfiehlt sich daher, einfache Weiterleitungen bevorzugt in der .htaccess-Datei zu realisieren.
Bedeutung des Parameters "L" bei RewriteRules
Der Parameter L steht für "Last Rule" und sorgt dafür, dass nach der Ausführung dieser Regel keine weiteren Rewrite-Regeln verarbeitet werden. Das verhindert unerwünschte Nebeneffekte durch nachfolgende Regeln.
RewriteRule ^old-page$ /new-page [L,R=301]
Hier wird eine alte Seite auf eine neue weitergeleitet. Die Abarbeitung der .htaccess Datei wird nach der Verarbeitung beendet.
Beispiel: Umleitung von HTTP auf HTTPS
Sollen alle Seiten einer Domain ausschließlich über eine verschlüsselte SSL-Verbindung aufgerufen werden, so kann dies über einen Eintrag in der .htaccess Datei im Startverzeichnis der Domain eingerichtet werden:
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Erläuterung:
RewriteCond %{HTTPS} !=on
: Prüft, ob die Verbindung nicht über HTTPS erfolgt.RewriteRule ^ %{HTTP_HOST}%{REQUEST_URI} [L,R=301]
: Leitet die Anfrage auf die HTTPS-Version der aktuellen Domain und URL um.
Beispiel: "www" vor der Domain immer entfernen
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
Erläuterung:
RewriteCond %{HTTP_HOST} ^www\.(.*)$
: Prüft, ob die Domain mit "www." beginnt.RewriteRule ^ %1%{REQUEST_URI} [L,R=301]
: Entfernt "www." und leitet auf die Version ohne "www." um.
Beispiel: "www" vor der Domain immer hinzufügen
Mit folgendem Eintrag werden alle Aufrufe für eine Domain ohne www auf die Variante mit www weitergeleitet:
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Erläuterung:
RewriteCond %{HTTP_HOST} !^www\.
: Prüft, ob die Domain nicht mit "www." beginnt.RewriteRule ^ www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
: Leitet die Anfrage auf die Version mit "www." vor der Domain um.
Besonderheit: 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]
Beispiel: Alte Domain auf neue Domain weiterleiten
Soll auf eine neue Domain umgeleitet werden, lautet der Eintrag in der .htaccess Datei folgendermaßen:
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$
RewriteRule ^ https://domain.de%{REQUEST_URI} [L,R=301]
Erläuterung:
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$
: Prüft, ob die Anfrage für "domain.com" oder "www.domain.com" bestimmt ist.RewriteRule ^ domain.de%{REQUEST_URI} [L,R=301]
: Leitet die Anfrage auf "domain.de" um, behält dabei den Pfad und die Parameter.
Beispiel: Domain auf eine Unterseite einer anderen Domain leiten
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com [NC]
RewriteRule ^(.*)$ https://domain.de/unterseite.html [R=301,L]
Der Parameter [NC] in der Zeile RewriteCond bedeutet "No Case", damit wird die Gross-/Kleinschreibung bei der aufgerufenen URL ignoriert.
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 jweiland.net/index.php?id=289&L=1 aufruft, kann man die URL umleiten zu jweiland.net/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.
Weiterleitung 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 ^.*$ https://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.
Beste Performance und perfekter Service für das Hosting ihrer Webseite. Alle Webhosting Tarife mit 100% SSD. Serverstandort Deutschland.
Informieren Sie sich hier über unsere Angebote.
Kostenloser Umzugsservice
Falls Sie derzeit bei einem anderen Hosting-Anbieter sind, bieten wir Ihnen einen kostenlosen Umzugservice auf einen unserer Hosting-Tarife an. So können Sie künftig unseren kompetenten Support nutzen und von unseren umfangreichen Dienstleistungen profitieren.
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 finden Sie in Ihrem Kundenmenu unter Technische Infos oder durch Eingabe des Befehls $PWD in der Shell.
Den User mit verschlüseltem Passwort muss in dem Fall in der .htpasswd vorhanden sein.
Die Unterseite mit dem Directory Listing muss von der TYPO3 index.php ausgeschlossen werden und erreichen Sie über die .htaccess in dem Projektverzeichnis mit folgenden Angaben nach der
RewriteEngine On:
RewriteRule ^fileadmin/downloads/$ - [L]
RewriteRule ^fileadmin/downloads/.*$ - [L]
Bestimmte 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.17
deny from 10.10.20.63
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
Passwort geschützter Bereich
Wenn man einen Bereich schaffen möchte der nicht für die Öffentlichkeit zugänglich ist, für zum Beispiel eine Test-Installation (test.meinedomain.de) seiner eigenen Webseite oder einen Mitarbeiter-Download Bereich mit den Bildern der Weihnachtsfeier (test.meinedomain.de/downloads/weihnachtsfeier2015/), wird nicht viel benötigt.
Nachdem der Verzeichnisschutz eingerichtet wurde, kann auf den geschützten Bereich von außen nur noch mit einem Benutzernamen und Passwort zugegriffen werden.
.htaccess und .htpasswd Dateien erstellen
Um die Dateien zu erstellen verbindet man sich per SSH auf den Webspace.
Dann mit cd bzw. mit mc in das zu schützende Verzeichnis wechseln (z.B.: cd typo3cms/projekt1/).
Dabei ist zu beachten, dass im Verzeichnis bereits eine .htaccess Datei existieren kann! Mit dem Unix-Befehl
ls -lah .ht*
kann dies geprüft werden. Wenn dort schon eine .htaccess Datei existiert müssen die Anpassungen in dieser ergänzt werden. Die zusätzlichen Zeilen Code müssen am Anfang der Datei gemacht werden bzw. vor eventuell vorhandenen Rewrite Regeln, andernfalls greifen die Einstellungen nicht korrekt!
Inhalt der .htaccess
AuthType Basic
AuthName "Bitte melden Sie sich an"
AuthUserFile /kompletter/server/pfad/zu/dem/verzeichnis/.htpasswd
require valid-user
Wichtig: Mit dem Shell Befehl pwd kann man sich den kompletten Server-Pfad ausgeben lassen, denn die .htpasswd wird nur so gefunden. Ersetzen Sie im oberen Code /kompletter/server/pfad/zu/dem/verzeichnis/ durch die Ausgabe des Befehls pwd.
Um die .htpasswd Datei zu erstellen gibt es mehrere Möglichkeiten zum Beispiel Online-Generatoren, doch halten wir diese für kritisch. Man ist gezwungen seinen Benutzername und Kennwort in ein fremdes Formular einzugeben und weiß nicht, was mit seinen Daten in Wirklichkeit passiert.
Aus diesem Grund empfehlen wir die folgende Vorgehensweise:
Mit dem Unix Befehl htpasswd 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.