.htaccess erklärt

Fügen Sie die Datei ein, und zu jeder Zeile steht ein Satz, der sagt, was sie tut. Rewrite-Muster werden Stück für Stück zerlegt, und Regeln, die bekannten Infektionsmustern entsprechen, werden zur genaueren Prüfung markiert.

Sie liegt im obersten Ordner der Website, meist public_html, httpdocs oder www. Weil der Name mit einem Punkt beginnt, blenden Dateimanager und FTP-Programme sie aus, bis Sie „versteckte Dateien anzeigen“ aktivieren.

Beispiele

🔒 Your browser does the reading. The file is not uploaded.

Konfiguration, die im Ordner liegt

Ein Webserver hat eine Hauptkonfigurationsdatei, die nur sein Administrator bearbeiten kann. Beim Shared Hosting sind das nicht Sie, also bietet Apache Ihnen einen anderen Weg. Es ist eine einfache Textdatei namens .htaccess, die in einem Ordner der Website liegt, und ihre Anweisungen gelten für diesen Ordner und alles darunter. LiteSpeed-Server lesen dieselbe Datei. nginx tut das nicht und ignoriert sie vollständig.

Der Server liest die Datei bei jeder Anfrage neu, eine Änderung wirkt also sofort, sobald Sie speichern. Ein Fehler ebenso. Eine falsch geschriebene Direktive, und jede Seite antwortet mit einem 500-Fehler, bis Sie die Zeile korrigieren. Legen Sie vor jeder Änderung eine Kopie an.

Sie sind selten der einzige Autor. WordPress schreibt einen Block zwischen # BEGIN WordPress und # END WordPress, und Caching-, Sicherheits- und Bild-Plugins fügen eigene markierte Blöcke hinzu. Das Tool erkennt die Markierungen von etwa 25 davon, darunter WP Rocket, LiteSpeed Cache, Wordfence und Really Simple SSL, und nennt den Besitzer jedes Blocks.

Eine Rewrite-Regel laut vorlesen

Bei mod_rewrite verlieren die meisten den Faden. Nehmen Sie dieses Paar:

RewriteCond %{HTTP_HOST} ^shop\.example\.com$ [NC]
RewriteRule ^products/(\d+)$ https://www.example.com/item?id=$1 [R=301,L]

Es liest sich wie ein Satz: „Wenn der angefragte Host shop.example.com ist, in beliebiger Groß- und Kleinschreibung, und der Pfad products/ gefolgt von Ziffern ist, schicke den Besucher dauerhaft an die neue Adresse, mit diesen Ziffern als id, und beende die Verarbeitung.“

  • Eine RewriteCond ist eine Bedingung an eine Servervariable. Sie gilt nur für die nächste RewriteRule. Mehrere hintereinander müssen alle zutreffen, es sei denn, eine endet mit [OR].
  • Der erste Teil einer RewriteRule ist ein regulärer Ausdruck, der gegen den Pfad geprüft wird. Klammern fangen Text ein, und $1, $2 verwenden ihn im Ziel wieder. %1 verwendet einen Treffer aus der letzten Bedingung.
FlagWirkung
LLetzte Regel dieses Durchlaufs. END beendet endgültig.
R=301Mit einer Weiterleitung antworten. 301 ist dauerhaft, 302 vorübergehend. Ohne R bleibt das Umschreiben intern, und die Adresszeile des Besuchers ändert sich nicht.
NCGroß- und Kleinschreibung ignorieren.
QSADen ursprünglichen Query-String behalten und anhängen.
F, GMit 403 ablehnen oder mit 410 Gone antworten.
PProxy: den Inhalt von einem anderen Server holen und als eigenen ausliefern.

Was markiert wird

Angreifer, die Schreibzugriff auf eine Website bekommen, nehmen sich oft die .htaccess vor, weil ein paar Zeilen dort Besucher umleiten oder ein verstecktes Skript erreichbar halten können. Das Tool vergleicht jede Zeile mit Mustern aus echten Infektionen und gibt ihr eines von zwei Etiketten.

Verdächtig, rot angezeigt:

  • eine Weiterleitung auf eine andere Domain, die nur für Besucher gilt, die von einer Suchmaschine kommen, oder nur für Smartphones. Der Inhaber, der die Adresse am Computer direkt eintippt, sieht sie nie;
  • ein anderes PHP-Skript, das Suchmaschinen-Crawlern ausgeliefert wird;
  • AddHandler, AddType oder SetHandler, die Bild- oder Textdateien als PHP ausführen lassen, oder gewöhnliche Dateien als CGI-Skripte;
  • php_value auto_prepend_file oder auto_append_file, die vor oder nach jedem Skript eine Datei laden, sowie allow_url_include;
  • ein FilesMatch-Block, der jede .php-, .py- und .exe-Datei sperrt, gefolgt von einem Block, der eine kurze Liste von PHP-Dateien erlaubt, die WordPress nicht mitliefert.

Prüfen, orange angezeigt: Zeilen im WordPress-Block, die nicht zu dessen Standardregeln gehören, Bedingungen, die nur auf Crawler oder Referrer zielen, das Flag [P], eine Fehlerseite auf einer anderen Domain, eingeschaltete Verzeichnisauflistung, PHP-Fehler, die Besuchern angezeigt werden, eine abgeschaltete Application Firewall, Zeilen mit mehr als 400 Zeichen oder voller base64- oder kodierter Zeichen, und unsichtbare Zeichen.

Zwei strukturelle Fehler werden ebenfalls gemeldet, da beide einen 500er auslösen: ein Block wie <IfModule>, der nie geschlossen wird, und Direktiven, die nur in der Hauptkonfiguration des Servers erlaubt sind, etwa DocumentRoot oder <VirtualHost>.

Das Tool liest Text. Es führt die Regeln nicht aus, es kann nicht wissen, welche Module Ihr Server geladen hat, und es sieht weder andere .htaccess-Dateien in übergeordneten Ordnern noch die Hauptkonfiguration, die alle das Ergebnis verändern. Eine Markierung heißt „finden Sie heraus, wer das hinzugefügt hat“, und seriöse Plugins lösen ab und zu eine aus. Eine Datei ohne Markierung beweist nicht, dass die Website sauber ist.

Wenn eine Zeile markiert ist und Sie sie nicht geschrieben haben

  1. Laden Sie eine Kopie der Datei als Beweis herunter, bevor Sie irgendetwas anfassen.
  2. Prüfen Sie das Änderungsdatum der Datei und suchen Sie nach anderen Dateien, die zur gleichen Zeit geändert wurden, besonders PHP-Dateien in Upload-Ordnern und die Namen, die in den markierten Regeln stehen.
  3. Entfernen Sie die feindlichen Zeilen und laden Sie die Datei ein paar Minuten später neu. Sind sie wieder da, schreibt ein Skript auf dem Server sie neu, und Zeilen zu löschen reicht nicht.
  4. Ändern Sie die Passwörter für Hosting, FTP oder SSH, Datenbank und CMS-Administrator, und aktualisieren Sie das CMS mit allen Plugins und Themes.
  5. Starten Sie die Prüfung auf unsichere Websites, um zu sehen, ob die Website schon auf einer Sperrliste der Browser steht, und die Weiterleitungsverfolgung, um zu bestätigen, dass Besucher dort landen, wo sie sollen.

Häufige Fragen

Wo liegt die .htaccess-Datei?

Im obersten Ordner der Website, oft public_html, httpdocs oder www genannt. Unterordner können eigene haben. Namen, die mit einem Punkt beginnen, sind standardmäßig versteckt, schalten Sie also „versteckte Dateien anzeigen“ im Dateimanager Ihres Hosters oder in Ihrem FTP-Programm ein.

Warum zeigt meine Website einen 500-Fehler, nachdem ich die .htaccess bearbeitet habe?

Apache bricht an der ersten Zeile ab, die er nicht deuten kann. Meist ist es ein Tippfehler im Namen einer Direktive, ein Block, der geöffnet und nie geschlossen wurde, eine Direktive, die Ihr Hoster in der .htaccess nicht erlaubt, oder ein Modul, das nicht installiert ist. Spielen Sie Ihre Kopie zurück und fügen Sie Ihre Änderungen dann einzeln wieder ein.

Was bedeutet [L,R=301] in einer RewriteRule?

R=301 sagt dem Browser, zur neuen Adresse zu gehen und sie sich als dauerhaft zu merken. L hindert den Server daran, weitere Rewrite-Regeln auf diese Anfrage anzuwenden. Zusammen ergeben sie die übliche dauerhafte Weiterleitung.

Woran erkenne ich, ob meine .htaccess-Datei gehackt wurde?

Suchen Sie nach Regeln, die Sie nicht hinzugefügt haben: Weiterleitungen auf unbekannte Domains, Bedingungen auf HTTP_REFERER oder HTTP_USER_AGENT, Handler, die Bilder als PHP ausführen, und auto_prepend_file. Vergleichen Sie den WordPress-Block mit dem Standardblock. Diese Seite markiert solche Muster für Sie.

Funktioniert .htaccess unter nginx?

Nein. nginx kennt keine Konfigurationsdateien pro Ordner. Wer den Server verwaltet, muss die Regeln in dessen eigene Konfiguration übertragen. Manche Hoster betreiben nginx vor Apache, und dann gilt die .htaccess weiterhin für die Anfragen, die bei Apache ankommen.

Wird die eingefügte Datei an Ihren Server geschickt?

Nein. Die Analyse ist ein Skript, das in Ihrem Browser läuft. Gewöhnen Sie sich trotzdem an, Passwörter und geheime Schlüssel aus allem zu entfernen, was Sie in eine Webseite einfügen.