Kategorien
Webentwicklung

htaccess

Mit der Verwendung der .htaccess Datei kannst du viele Aspekte des Apache Webservers (und seiner vielen Varianten) kontrollieren. Im Folgenden erfährst du alles, was du wissen musst, um spezielle Fehlerseiten einzurichten, Verzeichnisse mit einem Passwort zu schützen, Umleitungen einzurichten und vieles mehr.

Wie man diesen Leitfaden benutzt
Diese Anleitung wurde erstellt, um als umfassende Ressource für die Verwendung von .htaccess zu dienen. Wenn du komplett neu in der Verwendung von .htaccess bist, solltest du mit dem ersten Kapitel “.htaccess Grundlagen” unten beginnen.

Wenn du nach bestimmten Codebeispielen oder Tutorials suchst, schaue dir die Navigation auf der rechten Seite an, um direkt zu den Unterabschnitten innerhalb dieser Seite zu springen.

.htaccess Grundlagen
Bevor wir in die Befehle eintauchen, wollen wir uns mit den Grundlagen von .htaccess vertraut machen.

Was ist .htaccess?
Die .htaccess Datei ist eine Konfigurationsdatei, die steuert, wie ein Webserver auf verschiedene Anfragen antwortet. Sie wird von mehreren Webservern unterstützt, einschließlich dem beliebten Apache Webserver, der von den meisten kommerziellen Webhosting-Anbietern verwendet wird.

.htaccess Dateien arbeiten auf der Ebene eines Verzeichnisses, was ihnen erlaubt, globale Konfigurationseinstellungen von .htaccess Direktiven höher im Verzeichnisbaum außer Kraft zu setzen.

Wie wird .htaccess verwendet?
Einige häufige Verwendungszwecke für .htaccess sind die Umleitung von URLs, die Aktivierung des Passwortschutzes für Webseiten (oder Webseiten-Seiten), die Anzeige von benutzerdefinierten Fehlerseiten (wie z.B. 404-Seiten) und die Verbesserung der Suchmaschinenoptimierung durch eine konsistente Trailing Slash Policy.

Im letzteren Fall kann der Webmaster entscheiden, ob er einen abschließenden Schrägstrich am Ende jeder URL auf einer Seite benötigt oder nicht.

Warum heißt es .htaccess?
.htaccess steht für “Hypertext Access”. Der Name leitet sich von der ursprünglichen Verwendung des Tools ab, die darin bestand, den Benutzerzugriff auf bestimmte Dateien auf Verzeichnisbasis zu kontrollieren.

Durch die Verwendung einer Untermenge von Apaches http.conf Einstellungsdirektiven erlaubte .htaccess einem Systemadministrator, den Zugriff auf einzelne Verzeichnisse auf Benutzer mit einem Namen und Passwort zu beschränken, die in einer begleitenden .htpasswd Datei angegeben sind.

Während .htaccess Dateien immer noch dafür verwendet werden, werden sie auch für eine Reihe von anderen Dingen genutzt, die wir in diesem Guide behandeln werden.

Wo ist die .htaccess Datei?
Theoretisch könnte jeder Ordner (Verzeichnis) auf deinem Server eine haben. In der Regel befindet sie sich jedoch in deinem Web-Root-Ordner – das ist der Ordner, in dem sich der gesamte Inhalt deiner Website befindet und der normalerweise mit public_html oder www bezeichnet ist.

Wenn du ein einzelnes Verzeichnis hast, das mehrere Unterverzeichnisse enthält, gibt es normalerweise eine .htaccess Datei im Hauptverzeichnis (public_html) und auch eine in jedem Unterverzeichnis (/sitename).

Warum kann ich meine .htaccess Datei nicht finden?
Auf den meisten Dateisystemen sind Dateinamen, die mit einem Punkt (.) beginnen, versteckte Dateien. Das bedeutet, dass sie standardmäßig nicht sichtbar sind.

Aber es ist nicht schwer, an sie heranzukommen. Dein FTP-Client oder Dateimanager sollte eine Einstellung für “versteckte Dateien anzeigen” haben. Diese wird in verschiedenen Programmen an unterschiedlichen Stellen zu finden sein, aber sie befindet sich normalerweise in “Preferences”, “Settings”, oder “Folder Options”. Manchmal findest du sie auch im Menü “Ansicht”.

Was ist, wenn ich keine .htaccess Datei habe?
Als erstes solltest du sicherstellen, dass du die Option “Versteckte Dateien anzeigen” (oder ein entsprechendes Äquivalent) aktiviert hast, damit du sicher sein kannst, dass du tatsächlich keine hast. Oftmals werden .htaccess Dateien automatisch erstellt, so dass du normalerweise eine haben wirst. Aber das ist nicht immer der Fall.

Wenn du wirklich keine hast, kannst du sie einfach erstellen:

Beginne eine neue Datei in einem einfachen Texteditor.
Speichere sie im ASCII-Format (nicht UTF-8 oder sonstiges) als .htaccess.
Achte darauf, dass es nicht htaccess.txt oder etwas Ähnliches ist. Die Datei sollte nur den Namen .htaccess ohne zusätzliche Dateierweiterung haben.
Lade sie per FTP oder mit deinem browserbasierten Dateimanager in das entsprechende Verzeichnis hoch.
Fehlerbehandlung
Die Verwendung von .htaccess Dateien zur Angabe von Fehlerdokumenten ist sehr einfach, eine der einfachsten Dinge, die du mit dieser Funktion machen kannst.

Was ist ein Fehlercode?
Wenn eine Anfrage an einen Webserver gestellt wird, versucht er auf diese Anfrage zu antworten, normalerweise indem er ein Dokument ausliefert (im Falle von HTML-Seiten), oder indem er auf eine Anwendung zugreift und die Ausgabe zurückgibt (im Falle von Content Management Systemen und anderen Web-Apps).

Wenn dabei etwas schief läuft, wird ein Fehler generiert. Verschiedene Arten von Fehlern haben unterschiedliche Fehlercodes. Du bist wahrscheinlich mit dem 404-Fehler vertraut, der zurückgegeben wird, wenn das Dokument auf dem Server nicht gefunden werden kann.

Es gibt viele andere Fehlercodes, mit denen ein Server reagieren kann.

Client Request Fehler
400 – Schlechte Anfrage
401 – Autorisierung erforderlich
402 – Zahlung erforderlich (noch nicht verwendet)
403 – Verboten
404 – Nicht gefunden
405 – Methode nicht erlaubt
406 – Nicht akzeptabel (Kodierung)
407 – Proxy-Authentifizierung erforderlich
408 – Zeitüberschreitung der Anfrage
409 – Widersprüchliche Anfrage
410 – Vorbei
411 – Inhaltslänge erforderlich
412 – Vorbedingung fehlgeschlagen
413 – Anfrage Entität zu lang
414 – Request URI zu lang
415 – Nicht unterstützter Medientyp.
Server-Fehler
500 – Interner Server-Fehler
501 – Nicht implementiert
502 – Schlechtes Gateway
503 – Dienst nicht verfügbar
504 – Gateway Zeitüberschreitung
505 – HTTP Version wird nicht unterstützt.
Standard Fehlerbehandlung
Wenn du keine Art der Fehlerbehandlung angibst, wird der Server die Nachricht einfach an den Browser zurückgeben und der Browser wird dem Benutzer eine generische Fehlermeldung anzeigen. Dies ist normalerweise nicht ideal.

Fehlerdokumente spezifizieren
Erstelle ein HTML-Dokument für jeden Fehlercode, den du behandeln willst. Du kannst diese benennen, wie du willst, aber es ist hilfreich, sie so zu benennen, dass du dich daran erinnern kannst, wofür sie sind, wie not-found.html oder einfach 404.html.

Dann gibst du in der .htaccess Datei an, welches Dokument für jeden Fehlertyp verwendet werden soll.

ErrorDocument 400 /errors/bad-request.html
FehlerDokument 401 /errors/auth-reqd.html
FehlerDokument 403 /errors/forbid.html
FehlerDokument 404 /errors/not-found.html
FehlerDokument 500 /errors/server-err.html

Beachte, dass jede Direktive in eine eigene Zeile gesetzt wird.

Und das war’s. Sehr einfach.

Alternativen zu .htaccess für die Fehlerbehandlung
Die meisten Content Management Systeme (CMS) wie WordPress und Drupal und die meisten Webanwendungen haben ihre eigene Art, die meisten dieser Fehlercodes zu behandeln.

Passwortschutz mit .htaccess
Der ursprüngliche Zweck von .htaccess Dateien war es, den Zugriff auf bestimmte Verzeichnisse pro Benutzer zu beschränken (daher der Name, Hypertext-Zugriff). Also schauen wir uns das zuerst an.

.htpasswd
Benutzernamen und Passwörter für das .htaccess System werden in einer Datei namens .htpasswd gespeichert.

Diese werden jeweils in einer einzelnen Zeile gespeichert, in der Form:

username:encryptedpassword

zum Beispiel:

johnsmith:F418zSM0k6tGI

Es ist wichtig zu wissen, dass das Passwort, das in der Datei gespeichert ist, nicht das tatsächliche Passwort ist, mit dem man sich einloggt. Vielmehr ist es ein kryptographischer Hash des Passworts.

Das bedeutet, dass das Passwort durch einen Verschlüsselungsalgorithmus gelaufen ist, und das Ergebnis gespeichert wurde. Wenn sich ein Benutzer anmeldet, wird das Klartextpasswort eingegeben und durch den gleichen Algorithmus laufen gelassen. Wenn die Eingabe gleich ist, stimmen die Passwörter überein und der Benutzer erhält Zugang.

Das Speichern von Passwörtern auf diese Weise macht sie sicherer – sollte jemand Zugriff auf deine .htpasswd Datei erhalten, würde er nur die gehashten Passwörter sehen, nicht die Originale. Und es gibt keine Möglichkeit, die Originale aus dem Hash zu rekonstruieren – es ist eine Einweg-Verschlüsselung.

Es können mehrere verschiedene Hash-Algorithmen verwendet werden:

Sichere Algorithmen – Verwende einen der folgenden
bcrypt – Dieser Algorithmus ist der sicherste, aber auch der am langsamsten zu berechnende. Er wird von Apache und Nginx unterstützt.
md5 – Dies ist der Standard-Hash-Algorithmus, der von aktuellen Versionen des Apache verwendet wird. Er wird nicht von Nginx unterstützt.
Unsichere Algorithmen – Verwende diese nicht
crypt() – Dies war früher die Standard-Hashing-Funktion, aber sie ist nicht sehr sicher.
SHA und Salted SHA.
Nutzernamen und Passwörter auf der Kommandozeile erstellen
Du kannst eine .htpasswd Datei erstellen und Benutzernamen-Passwort Paare hinzufügen, direkt von der Kommandozeile oder dem SSH Terminal.

Das Kommando für den Umgang mit der .htpasswd Datei ist einfach htpasswd.

Um eine neue .htpasswd Datei zu erstellen, verwende den Befehl mit der Option -c (für create), dann gib den Pfad zum Verzeichnis ein (nicht die URL, den tatsächlichen Pfad auf dem Server). Du kannst auch einen Benutzer angeben, den du hinzufügen möchtest.

htpasswd -c /usr/local/etc/.htpasswd johnsmith

Dies erstellt eine neue .htpasswd Datei im /etc/ Verzeichnis und fügt einen Eintrag für einen Benutzer namens johnsmith hinzu. Du wirst nach einem Passwort gefragt, das ebenfalls mit der md5-Verschlüsselung gespeichert wird.

Wenn es bereits eine .htpasswd Datei am angegebenen Ort gibt, wird keine neue erstellt – der neue Benutzer wird einfach an die bestehende Datei angehängt.

Wenn du lieber den bcrypt Hash-Algorithmus verwenden möchtest, verwende die Option -b.

Passwort Hashing ohne die Kommandozeile
Wenn du dich mit der Kommandozeile oder dem SSH-Terminal nicht wohl fühlst (oder wenn du aus irgendeinem Grund keinen Zugang dazu hast), kannst du einfach eine .htpasswd-Datei erstellen und sie mit einem einfachen Texteditor füllen und sie per FTP oder Dateimanager hochladen.

Aber dann musst du deine Passwörter irgendwie verschlüsseln, da der htpasswd Befehl das für dich erledigt hat.

Es gibt viele Hilfsprogramme zur Verschlüsselung von .htpasswd, die online verfügbar sind. Das beste ist wahrscheinlich der htpasswd Generator auf Aspirine.org.

Dieser gibt dir mehrere Optionen für den Hash-Algorithmus und die Passwortstärke. Du kannst einfach die Ausgabe von dort in deine .htpasswd Datei kopieren und einfügen.

Wo du deine .htpasswd Datei aufbewahrst
Du musst nicht für jede .htaccess Datei eine eigene .htpasswd Datei haben. Eigentlich solltest du das auch nicht. Unter den meisten normalen Umständen solltest du eine für deinen gesamten Webhosting-Account oder dein Hauptserververzeichnis haben.

Die .htpasswd Datei sollte sich nicht in einem öffentlich zugänglichen Verzeichnis befinden – nicht public_html oder www oder einem Unterverzeichnis. Sie sollte oberhalb dieser Verzeichnisse liegen, in einem Ordner, der nur vom Server selbst aus zugänglich ist.

Wie man .htpasswd mit .htaccess verwendet
Jedes Verzeichnis kann seine eigene .htaccess Datei haben, mit seinem eigenen Satz an Benutzern, die darauf zugreifen dürfen.

Wenn du möchtest, dass jeder (auch nicht eingeloggte Benutzer) auf das Verzeichnis und seine Dateien zugreifen kann, tue einfach nichts – das ist die Voreinstellung.

Um den Zugriff einzuschränken, musst du folgendes zur .htaccess Datei hinzufügen:

AuthUserFile /usr/local/etc/.htpasswd
AuthName “Name des geschützten Bereichs”
AuthType Basic
require valid-user

Die erste Zeile gibt den Pfad und Dateinamen zu deiner Liste von Benutzernamen und Passwörtern an. Die zweite Zeile gibt einen Namen für den geschützten Bereich an. Das kann alles sein, was du willst. Die dritte Zeile spezifiziert “Basic” Authentifizierung, was du normalerweise brauchst.

Der -Tag gibt an, was eingeschränkt wird (in diesem Fall die Fähigkeit, GET oder POST zu jeder Datei im Verzeichnis zu machen). Innerhalb des Paares von -Tags ist eine Liste, wer auf Dateien zugreifen darf.

Im obigen Beispiel kann jeder gültige Benutzer auf Dateien zugreifen. Wenn du den Zugriff auf einen bestimmten Benutzer oder wenige Benutzer beschränken willst, kannst du sie benennen.

AuthUserFile /usr/local/etc/.htpasswd
AuthName “Name des sicheren Bereichs”
AuthType Basic
require user johnsmith require user janedoe

Du kannst Benutzer auch in Gruppen einteilen und den Zugriff basierend auf der Gruppe erlauben. Dies geschieht, indem du eine weitere Datei hinzufügst, die die Gruppen spezifiziert.

Die Gruppendatei, die z.B. .htgroups heißen könnte, sieht so aus:

admin: johnsmith janedoe
staff: jackdoe cindysmith

Dann kannst du sie in deiner .htaccess Datei angeben:

AuthUserFile /usr/local/etc/.htpasswd
AuthGroupDatei /usr/local/etc/.htgroup
AuthName “Admin Bereich”
AuthType Basic
require group admin
Alternativen zu .htpasswd
Die Verwendung von .htaccess und .htpasswd, um den Zugriff auf bestimmte Dateien auf deinem Server einzuschränken, macht nur dann wirklich Sinn, wenn du eine Menge statischer Dateien hast. Die Funktion wurde entwickelt, als Websites normalerweise eine Sammlung von HTML-Dokumenten und zugehörigen Ressourcen waren.

Wenn du ein Content Management System (CMS) wie WordPress oder Drupal verwendest, kannst du die eingebauten Benutzerverwaltungsfunktionen nutzen, um den Zugriff auf Inhalte zu beschränken oder zu gewähren.

Aktivieren von Server Side Includes (SSI)
Lass uns nun lernen, was Server Side Includes sind und wie du sie nutzen kannst.

Was sind Server Side Includes?
SSI, oder Server Side Includes, ist eine leichtgewichtige Skriptsprache, die hauptsächlich dazu verwendet wird, HTML-Dokumente in andere HTML-Dokumente einzubetten. Dies macht es einfach, gemeinsame Elemente wie Kopf- und Fußzeilen, Seitenleisten und Menüs wiederzuverwenden. Man kann es als einen Vorläufer der heutigen Template- und Content-Management-Systeme betrachten.

SSI hat auch bedingte Direktiven (if, else, etc.) und Variablen, was es zu einer kompletten, wenn auch etwas schwer zu benutzenden, Skriptsprache macht. (Normalerweise wird jedes Projekt, das komplizierter ist als eine Handvoll Includes, einen Entwickler dazu veranlassen, eine robustere Sprache wie PHP oder Perl zu wählen).

SSI aktivieren
Einige Webhosting-Server haben Server Side Includes standardmäßig aktiviert. Wenn nicht, kannst du es in deiner .htaccess Datei aktivieren, wie folgt:

AddType text/html .shtml
AddHandler server-parsed .shtml
Optionen Indexes FollowSymLinks Includes

Dies sollte SSI für alle Dateien aktivieren, die die Endung .shtml haben.

SSI auf .html Dateien
Wenn du SSI-Parsing für .html-Dateien aktivieren willst, kannst du eine Direktive hinzufügen, um das zu erreichen:

AddHandler server-parsed .html

Der Vorteil davon ist, dass du SSI benutzen kannst, ohne dass die Welt weiß, dass du es benutzt. Außerdem kannst du deine .html Dateierweiterungen beibehalten, wenn du in der Zukunft die Implementierungen änderst.

Der Nachteil dabei ist, dass jede .html Datei mit SSI geparst wird. Wenn du viele .html Dateien hast, die eigentlich kein SSI Parsing benötigen, kann dies eine Menge unnötigen Server-Overhead verursachen, der die Ladezeiten deiner Seite verlangsamt und CPU-Ressourcen verbraucht.

SSI auf deiner Index Seite
Wenn du nicht alle .html Dateien parsen willst, aber SSI auf deiner Index (Home) Seite verwenden willst, musst du das in deiner .htaccess Datei angeben.

Das liegt daran, dass der Webserver, wenn er nach der Indexseite eines Verzeichnisses sucht, nach index.html sucht, es sei denn, du sagst ihm etwas anderes.

Wenn du keine .html Dateien parsst, musst du deine Indexseite index.shtml nennen, damit SSI funktioniert, und dein Server weiß nicht, dass er standardmäßig danach sucht.

Um das zu aktivieren, füge einfach hinzu:

DirectoryIndex index.shtml index.html

Dies teilt dem Webserver mit, dass die index.shtml Datei die Hauptindexdatei für das Verzeichnis ist. Der zweite Parameter, index.html, ist ein Backup, für den Fall, dass index.shtml nicht gefunden werden kann.

IP Blacklisting und IP Whitelisting
Du kannst .htaccess verwenden, um Benutzer von einer bestimmten IP-Adresse zu blockieren (Blacklisting). Dies ist nützlich, wenn du einzelne Benutzer von bestimmten IP-Adressen identifiziert hast, die Probleme verursacht haben.

Du kannst auch den umgekehrten Weg gehen und alle Besucher mit Ausnahme von Besuchern von einer bestimmten IP-Adresse blockieren (Whitelisting). Dies ist nützlich, wenn du den Zugang nur auf zugelassene Benutzer beschränken willst.

Blacklisting nach IP
Um bestimmte IP-Adressen zu blockieren, benutze einfach die folgende Direktive, mit den entsprechenden IP-Adressen:

order allow,deny
deny von 111.22.3.4
deny von 789.56.4.
allow from all

Die erste Zeile besagt, dass die allow-Direktiven zuerst ausgewertet werden, bevor die deny-Direktiven. Das bedeutet, dass allow from all der Standardzustand ist und nur diejenigen, die auf die deny-Direktiven passen, verweigert werden.

Wenn die Reihenfolge deny,allow umgekehrt wäre, dann würde die allow from all Direktive als letztes ausgewertet werden, was jeden erlauben würde und die deny Anweisungen außer Kraft setzen würde.

Beachte die dritte Zeile, die deny from 789.56.4. enthält – das ist keine vollständige IP-Adresse. Dies wird alle IP-Adressen innerhalb dieses Blocks verweigern (alle, die mit 789.56.4. beginnen).

Du kannst so viele IP-Adressen wie du willst, eine in jeder Zeile, mit einer deny from Direktive einschließen.

Whitelisting nach IP
Das Gegenteil des Blacklistings ist das Whitelisting – das Sperren von allen außer den von dir angegebenen.

Wie du dir vielleicht denken kannst, muss die Reihenfolge der Direktive umgekehrt werden, so dass zuerst alle verweigert werden, aber dann bestimmte Adressen erlaubt werden.

Reihenfolge deny,allow
deny von allen
erlaube von 111.22.3.4
allow von 789.56.4.
Blockier-Aktionen
.htaccess kann verwendet werden, um Benutzer nach Domain oder Referrer zu blockieren. Und du kannst sie nutzen, um Bots und Scraper zu blockieren. Lass uns herausfinden wie.

Wie man Benutzer nach Domain blockiert
Du kannst auch Benutzer basierend auf einem Domainnamen blockieren oder zulassen. Dies kann helfen, Leute zu blockieren, auch wenn sie von IP-Adresse zu IP-Adresse wechseln.

Dies wird jedoch nicht gegen Leute funktionieren, die ihre Reverse-DNS-IP-Adressen-Zuordnung kontrollieren können.

Befehl allow,deny
deny von beispiel.com
allow from all

Dies funktioniert auch für Subdomains – im vorherigen Beispiel werden auch Besucher von xyz.example.com blockiert.

Wie man Benutzer nach Referrer blockiert
Ein Referrer ist die Webseite, die einen Link zu deiner Seite enthält. Wenn jemand einem Link zu einer Seite auf deiner Seite folgt, ist die Seite, von der er kommt, der Referrer.

Das funktioniert aber nicht nur bei klickbaren Hyperlinks zu deiner Website.

Seiten irgendwo im Internet können direkt auf deine Bilder verlinken (“Hotlinking”) – und dabei deine Bandbreite nutzen und möglicherweise dein Urheberrecht verletzen, ohne dir einen Nutzen in Form von Traffic zu bringen. Sie können auch zu deinen CSS-Dateien, JS-Skripten oder anderen Ressourcen hotlinken.

Die meisten Webseitenbesitzer sind damit einverstanden, wenn es nur ein bisschen passiert, aber manchmal kann diese Art von Dingen zu Missbrauch werden.

Außerdem sind manchmal tatsächlich im Text anklickbare Hyperlinks problematisch, z.B. wenn sie von feindlichen Webseiten kommen.

Aus all diesen Gründen möchtest du vielleicht Anfragen blockieren, die von bestimmten Referrern kommen.

Um dies zu tun, musst du das Modul mod_rewrite aktivieren. Dieses ist bei den meisten Webhostern standardmäßig aktiviert, aber wenn es das nicht ist (oder du dir nicht sicher bist), kannst du normalerweise einfach deine Hostingfirma fragen. (Wenn sie es nicht aktivieren können oder wollen, solltest du vielleicht über einen neuen Hoster nachdenken).

Die .htaccess-Direktiven, die Referrer-basiertes Blockieren ermöglichen, basieren auf der mod_rewrite-Engine.

Der Code zum Blockieren nach Referrer sieht wie folgt aus:

RewriteEngine on
RewriteCond % ^http://.example.com [NC,OR] RewriteCond % ^http://.anotherexample.com [NC,OR]
RewriteCond % ^http://.einesweiterenbeispiel.com [NC] RewriteRule . – [F]

Dies ist ein wenig knifflig, also gehen wir es durch.

Die erste Zeile, RewriteEngine on, macht den Parser darauf aufmerksam, dass eine Reihe von Direktiven, die mit Rewrite zu tun haben, kommen.

Die nächsten drei Zeilen blockieren jeweils eine verweisende Domain. Der Teil, den du für deinen eigenen Gebrauch ändern müsstest, ist der Domainname (example) und die Erweiterung (.com).

Der Backward-Slash vor dem .com ist ein Escape-Zeichen. Das Pattern Matching, das im Domainnamen verwendet wird, ist ein regulärer Ausdruck, und der Punkt bedeutet etwas in RegEx, also muss er mit dem Back-Slash “escaped” werden.

Das NC in den Klammern gibt an, dass bei der Übereinstimmung nicht zwischen Groß- und Kleinschreibung unterschieden werden soll. Das OR ist ein buchstäbliches “oder” und bedeutet, dass noch andere Regeln kommen. (Das heißt – wenn die URL diese oder diese oder diese ist, folge dieser Rewrite-Regel.)

Die letzte Zeile ist die eigentliche Rewrite-Regel. Das [F] steht für “Forbidden”. Alle Anfragen mit einem Referrer, der mit denen in der Liste übereinstimmt, werden fehlschlagen und einen 403 Forbidden Fehler ausgeben.

Bots und Web Scraper blockieren
Einer der ärgerlichsten Aspekte beim Verwalten einer Website ist die Entdeckung, dass deine Bandbreite von nicht-menschlichen Besuchern – Bots, Crawlern, Web Scrapers – aufgefressen wird.

Das sind Programme, die dazu gedacht sind, Informationen aus deiner Seite zu ziehen, normalerweise mit dem Ziel, sie als Teil einer minderwertigen SEO-Operation wieder zu veröffentlichen.

Es gibt natürlich auch legitime Bots – wie die der großen Suchmaschinen. Aber die anderen sind wie Schädlinge, die nur deine Ressourcen auffressen und dir keinerlei Wert liefern.

Es gibt mehrere hundert identifizierte Bots. Du wirst nie in der Lage sein, sie alle zu blockieren, aber du kannst die Aktivität auf ein dumpfes Brüllen reduzieren, indem du so viele wie möglich blockierst.

Es gibt ein nützliches Set von Rewrite-Regeln, das über 400 bekannte Bots blockiert, zusammengestellt von AskApache.

Festlegen einer Standarddatei für ein Verzeichnis
Wenn eine Anfrage an einen Webserver für eine URL gestellt wird, die keinen Dateinamen angibt, wird bei den meisten Webservern davon ausgegangen, dass sich die URL auf ein Verzeichnis bezieht.

Wenn du also http://example.com anforderst, wird der Apache (und die meisten anderen Webserver) im Stammverzeichnis der Domain (normalerweise /public_html oder etwas Ähnliches, aber vielleicht /example-com) nach der Standarddatei suchen.

Die Standarddatei heißt standardmäßig index.html. Das geht auf die Anfänge des Internets zurück, als eine Webseite nur eine Sammlung von Dokumenten war und die “Home”-Seite normalerweise ein Index dieser Dokumente war.

Aber du möchtest vielleicht nicht, dass index.html die Standardseite ist. Zum Beispiel könntest du einen anderen Dateityp brauchen, wie index.shtml, index.xml oder index.php.

Oder du siehst deine Startseite nicht als “index” an und möchtest sie anders nennen, wie home.html oder main.html.

Einstellen der Standardverzeichnisseite
.htaccess erlaubt es dir, die Standardseite für ein Verzeichnis einfach zu setzen:

DirectoryIndex [Dateiname hier]

Wenn du willst, dass deine Standardseite home.html ist, ist es so einfach wie:

VerzeichnisIndex home.html
Mehrere Standardseiten setzen
Du kannst auch mehr als einen DirectoryIndex angeben:

DirectoryIndex index.php index.shtml index.html

Das funktioniert so, dass der Webserver zuerst nach der ersten Seite sucht. Wenn er diesen nicht finden kann, sucht er nach dem zweiten und so weiter.

Warum würdest du das tun wollen? Sicherlich weißt du, welche Datei du als Standardseite verwenden willst, oder?

Denke daran, dass eine .htaccess ihr eigenes Verzeichnis und alle Unterverzeichnisse betrifft, bis sie durch eine lokalere Datei überschrieben wird. Das bedeutet, dass eine .htaccess-Datei in deinem Hauptverzeichnis Anweisungen für viele Unterverzeichnisse enthalten kann, und jedes kann seinen eigenen Standardseitennamen haben.

Die Möglichkeit, diese Regeln in einer einzigen .htaccess-Datei im Stammverzeichnis zu platzieren, bedeutet, dass du nicht alle anderen Direktiven in der Datei auf jeder Verzeichnisebene duplizieren musst.

URL-Umleitungen und URL-Rewriting
Eine der häufigsten Anwendungen von .htaccess-Dateien sind URL-Weiterleitungen.

URL-Redirects sollten verwendet werden, wenn sich die URL für ein Dokument oder eine Ressource geändert hat. Dies ist besonders hilfreich, wenn du deine Website neu organisiert oder den Domainnamen geändert hast.

301 vs. 302 Weiterleitungen
Aus der Sicht eines Browsers gibt es zwei Arten von Weiterleitungen, 301 und 302. (Diese Zahlen beziehen sich auf den Fehlercode, der vom Webserver generiert wird.)

301 bedeutet “Dauerhaft verschoben”, während 302 “Vorübergehend verschoben” bedeutet. In den meisten Fällen solltest du 301 verwenden. Dies bewahrt alle SEO-Eigenschaften der ursprünglichen URL und gibt sie an die neue Seite weiter.

Außerdem werden die meisten Browser ihre Lesezeichen aktualisieren. Die meisten Browser werden auch die alte-zu-neue Zuordnung zwischenspeichern, so dass sie einfach die neue URL anfordern, wenn ein Link oder Benutzer versucht, auf die ursprüngliche Seite zuzugreifen. Wenn sich die URL dauerhaft geändert hat, sind das alles wünschenswerte Ergebnisse.

Es gibt kaum einen Grund 302 Redirects zu verwenden, da es normalerweise kaum einen Grund gibt, eine URL temporär zu ändern. Eine URL jemals zu ändern ist unerwünscht, aber manchmal notwendig. Eine URL temporär zu ändern, mit dem Plan, sie später wieder zu ändern, ist eine schlechte Idee und kann fast immer vermieden werden.

Alle Beispiele in diesem Abschnitt werden den 301 Redirect verwenden.

Redirect vs. Rewrite
Es gibt zwei verschiedene Möglichkeiten, eine URL mit .htaccess Direktiven zu “verändern” – den Redirect Befehl und die mod_rewrite Engine.

Der Redirect-Befehl sendet tatsächlich eine Umleitungsnachricht an den Browser und sagt ihm, nach welcher anderen URL er suchen soll.

Typischerweise “übersetzt” das mod_rewrite Tool eine URL (die in einer Anfrage angegebene) in etwas, das das Dateisystem oder das CMS versteht, und behandelt dann die Anfrage so, als ob die übersetzte URL die angeforderte URL wäre.

Wenn es auf diese Weise verwendet wird, merkt der Webbrowser nicht, dass etwas passiert ist – er erhält einfach den Inhalt, nach dem er gefragt hat.

Das mod_rewrite Tool kann auch verwendet werden, um 301 Weiterleitungen zu erzeugen, die genauso funktionieren wie der Redirect Befehl, aber mit mehr Optionen für Regeln – mod_rewrite kann komplexe Mustervergleiche und Umschreibanweisungen haben, die Redirect nicht nutzen kann.

Basic Page Redirect
Um eine Seite auf eine andere URL umzuleiten, lautet der Code:

Redirect 301 /relative-url.html http://example.com/full-url.html

Dieser einzeilige Befehl besteht aus vier Teilen, die jeweils durch ein Leerzeichen getrennt sind:

Der Redirect-Befehl
Der Typ der Weiterleitung ( 301 – Moved Permanently )
Die relative URL der ursprünglichen Seite
Die volle und vollständige URL der neuen Seite.
Die relative URL bezieht sich auf das Verzeichnis, in dem sich die .htaccess-Datei befindet, was normalerweise das Web-Root oder das Root der Domain ist.

Wenn also http://example.com/blog.php nach http://blog.example.com verschoben worden wäre, würde der Code lauten:

Redirect 301 /blog.php http://blog.example.com
Einen großen Teil deiner Website umleiten
Wenn du deine Verzeichnisstruktur verschoben hast, aber deine Seitennamen gleich geblieben sind, möchtest du vielleicht alle Anfragen für ein bestimmtes Verzeichnis auf das neue umleiten.

Umleitung 301 /altes-verzeichnis http://example.com/new-directory

Eine ganze Seite umleiten
Was ist, wenn deine gesamte Seite zu einer neuen URL umgezogen ist? Ganz einfach.

Redirect 301 / http://newurl.com
Umleitung von www zu non-www
Zunehmend bewegen sich Websites weg von der www-Subdomain.

Es war nie wirklich notwendig, aber es war ein Überbleibsel aus den Tagen, als die meisten Leute, die eine Webseite betrieben, einen Server benutzten, um viele ihrer eigenen Dokumente zu speichern, und das www oder “world wide web” Verzeichnis wurde für Inhalte benutzt, die sie mit anderen teilen wollten.

Heutzutage benutzen es einige Leute, und andere nicht. Leider tippen einige Benutzer immer noch aus Gewohnheit automatisch www. vor jede URL. Wenn du kein www. verwendest, möchtest du sicherstellen, dass diese Anfragen an der richtigen Stelle landen.

Dazu brauchst du das Modul mod_rewrite, das wahrscheinlich schon auf deinem Webhoster installiert ist.

Optionen +FollowSymlinks
RewriteEngine an
RewriteCond % ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.org/$1 [R=301,NC]

Sei vorsichtig!

Viele andere .htaccess und mod_rewrite Anleitungen bieten eine Variation des folgenden Codes an, um dies zu erreichen:

Optionen +FollowSymlinks
RewriteEngine ein
RewriteCond % !^example.com [NC]
RewriteRule ^(.*)$ http://example.org/$1 [R=301,NC]

Siehst du das Problem damit?

Es leitet alle Subdomains auf die Hauptdomain um. Also nicht nur www.example.com, sondern auch blog.example.com und admin.example.com und alles andere. Das ist wahrscheinlich nicht das Verhalten, das du willst.

Umleitung auf www
Aber was ist, wenn du die Subdomain www benutzt?

Du solltest wahrscheinlich eine Weiterleitung einrichten, um sicherzustellen, dass die Leute dorthin gelangen, wo sie hinwollen. Besonders jetzt, wo weniger Leute automatisch das www an den Anfang von URLs anhängen.

Du kehrst einfach den obigen Code um.

RewriteEngine Ein
RewriteCond % ^example.com [NC]
RewriteRule ^(.*) http://www.website.com/$1 [R=301,NC]
Soll ich 404-Fehler auf die Homepage umleiten?
Mehrere Anleitungen zu .htaccess-Weiterleitungen beinhalten Anweisungen, wie man 404-Fehler auf die Homepage umleiten kann.

Dies ist ein gutes Beispiel dafür, dass nur weil man etwas tun kann, es nicht bedeutet, dass man etwas tun sollte.

404-Fehler auf die Homepage der Seite umzuleiten ist eine schreckliche Idee. Es verwirrt Besucher, die nicht herausfinden können, warum sie die Startseite einer Seite sehen, anstatt einer richtigen 404-Fehlerseite.

Alle Webseiten sollten eine benutzerdefinierte 404 Seite haben, die dem Benutzer klar erklärt, dass der Inhalt nicht gefunden werden konnte und idealerweise einige Suchfunktionen anbietet, um dem Benutzer zu helfen, das zu finden, wonach er gesucht hat.

Warum .htaccess anstelle von Alternativen verwenden?
Du kannst Redirects in PHP-Dateien einrichten, oder mit jeder anderen Art von serverseitigem Scripting. Du kannst sie auch innerhalb deines Content Management Systems einrichten (was im Grunde das Gleiche ist).

Aber die Verwendung von .htaccess ist normalerweise die schnellste Art der Weiterleitung. Bei PHP-basierten Redirects oder anderen serverseitigen Skriptsprachen muss die gesamte Anfrage abgeschlossen und das Skript tatsächlich interpretiert werden, bevor eine Redirect-Nachricht an den Browser gesendet wird.

Bei .htaccess-Redirects antwortet der Server direkt auf die Anfrage mit der Redirect-Nachricht. Dies ist viel schneller.

Du solltest jedoch beachten, dass einige Content Management Systeme Redirects tatsächlich verwalten, indem sie die .htaccess programmatisch aktualisieren. WordPress zum Beispiel hat Redirect-Plugins, die auf diese Weise funktionieren. (Und WP’s hübsches URL-System macht das auch.)

Dies gibt dir die Leistung der direkten Verwendung von .htaccess, während du gleichzeitig den Komfort der Verwaltung aus deiner Anwendung heraus hast.

Verstecken deiner .htaccess Datei: Sicherheitsüberlegungen
Es gibt keinen Grund, warum jemand in der Lage sein sollte, deine .htaccess Datei vom Web aus zu sehen.

Außerdem gibt es einige wichtige Gründe, warum du auf keinen Fall möchtest, dass jemand deine .htaccess Datei sieht.

Das größte Problem ist, dass, wenn du eine .htpasswd Datei verwendest, ihr Ort in der .htaccess Datei angegeben ist. Wenn du weißt, wo sie zu finden ist, ist es einfacher, sie zu finden.

Außerdem solltest du in der Regel keine Details über deine Implementierung an die Öffentlichkeit geben.

Rewrite-Regeln, Verzeichniseinstellungen, Sicherheit – all die Dinge, für die du .htaccess verwendest – es ist eine gute Sicherheitspraxis, all dies hinter den Kulissen deines Webservers zu verstecken. Je mehr ein Hacker über dein System erfahren kann, desto einfacher ist es, es zu kompromittieren.

Es ist sehr einfach, deine .htaccess Datei vor der Öffentlichkeit zu verstecken. Füge einfach den folgenden Code ein:


order allow,deny
deny from all

MIME-Typen zulassen
MIME-Typen sind Dateitypen. Sie werden MIME-Typen genannt, weil sie ursprünglich mit E-Mail in Verbindung gebracht wurden (MIME steht für “Multipurpose Internet Mail Extensions”). Sie werden nicht nur “Dateitypen” genannt, weil MIME ein spezielles Format für die Angabe des Dateityps impliziert.

Wenn du jemals ein HTML-Dokument verfasst hast, hast du wahrscheinlich einen MIME-Typ angegeben, auch wenn du es nicht wusstest:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

sechs − eins =