Grundlagen: wie funktioniert ein Webserver?
Bevor ich dir zeige, was eine .htaccess-Datei ist, möchte ich dir noch kurz erklären, wie WordPress überhaupt funktioniert. Dazu ein Bild:
Dein Hosting-Provider betreibt ein Rechenzentrum für dich und andere Kunden; in diesem Rechenzentrum befinden sich mehrere Server.
Einen Server kannst du dir wie einen Computer vorstellen, der ohne Tastatur, Maus und Bildschirm betrieben wird.
Auf diesen Servern läuft ein Webserver. Das ist eine spezielle Software, welche Dateien an deinen Browser sendet und Programme, wie z.B. WordPress ausführen kann.
Dieser Webserver ist in den meisten Fällen der Apache httpd Server. Das ist ein mächtige Software, mit sehr vielen Einstellungsmöglichkeiten. Diese werden von deinem Hosting-Provider für dich vorgenommen.
Mit .htaccess-Dateien kannst du diese Konfiguration vom Webserver anpassen.
Du kannst zum Beispiel den Zugriff zu bestimmten Teilen deiner Website sperren (mehr dazu weiter unten), schöne, SEO-freundliche URLs im WordPress einstellen oder die Konfiguration von PHP ändern.
Warum ein . am Anfang?
Der Apache httpd Server kommt ursprünglich aus der Linux-Welt, und als Betriebssystem verwendet dein Hosting-Provider vermutlich auch Linux. Und unter Linux beginnen versteckte Dateien mit einem Punkt.
Mit “versteckt” ist gemeint, dass diese Dateien im normalen Browser nicht sichtbar sind – weil sie eben nur für spezielle Zwecke benötigt werden.
So bearbeitest du die .htaccess-Datei
Um die .htaccess-Datei bearbeiten zu können, benötigst du Zugang via FTP zum Server. Ich verwende sehr gerne das Programm Cyberduck. Die Software ist kostenlos und erlaubt dir mit FTP und auch dem sicheren SSH auf den Server zuzugreifen.
Das ganze sieht dann so aus:
Wie du schon siehst ist die .htaccess-Datei grau dargestellt – weil sie eben “versteckt” ist.
Ein Rechtsklick und “Bearbeiten mit…” sowie die Auswahl des entsprechenden Programms (oder der Shortcut Cmd+k) erlauben dir die .htaccess-Datei zu bearbeiten.
Der Inhalt der Datei ist reiner Text und sieht bei einem Standard-WordPress so aus:
Wie du vielleicht auf den ersten Blick erkennst – sehr kryptisch. Viele komische Symbole und Klammern. Aber mit ein wenig Übung machen die Inhalte dann doch Sinn.
Wichtig: erstelle auf jeden Fall ein Backup der Inhalte der Datei!
Denn wenn du dich vertippst, dann funktioniert deine WordPress-Seite nicht mehr.
Dazu reicht schon eine falsche Klammer und du siehst nur mehr eine weiße Seite oder bekommst eine Fehlermeldung “Error 500” vom Browser.
Daher: Backup anlegen!
So, jetzt aber zum spannenden Teil, nämlich was du mit der .htaccess-Datei alles anstellen kannst :-)
Weiterleitungen mit mod_rewrite und .htaccess
Du kennst das vielleicht – du hast einen Artikel im WordPress umgeschrieben und auch den Permalink vom Artikel geändert. Nur jetzt funktionieren die Links, welche du im Facebook geteilt hast, nicht mehr.
In diesem Fall kannst du dir mit einer Weiterleitung helfen – von der alten URL auf die neue URL, unter der dein Artikel jetzt erreichbar ist.
Eine der Möglichkeiten so eine Weiterleitung einzurichten ist durch folgenden Eintrag in der .htaccess-Datei:
RewriteEngine On
RewriteBase /
RewriteRule ^alter-permalink https://%{HTTP_HOST}/neuer-permalink [R=308,L]
Die Zahl hinter dem “R=“ gibt an, ob die Umleitung dauerhaft (308) oder nur übergangsweise (307) sein soll. (Für alte Hasen mag 307 und 308 “komisch” aussehen, aber dies sind die offiziellen Nachfolger von 301 und 302!).
Das ist nur ein sehr einfaches Beispiel, es gibt noch viel mehr Möglichkeiten, die ich in einem getrennten Blog-Beitrag beschreiben werde. Bis dahin findest du alle Details in der offiziellen Dokumentation von mod_rewrite.
URLs aus Google entfernen mit mod_rewrite und der .htaccess
Um einzelne URLs aus Google zu entfernen sollte dein Webserver den HTTP-Status 404 („Not found“) oder 410 („Gone“) zurückliefern.
Auch dies geht sehr einfach und unabhängig von WordPress, Joomla oder Drupal direkt in der .htaccess-Datei:
RewriteEngine On
RewriteBase /
RewriteRule ^alter-permalink [G,L]
Das Flag „G“ gibt den HTTP-Status-Code 410 zurück, wenn die URL aufgerufen wird.
Besucht der Google-Bot das nächste Mal diese URL wird er diese aus dem Google-Index entfernen.
Wasserdichte Angebote schreiben in nur 10 Minuten?
Hol dir die ultimative Angebotsvorlage für Webdesigner, Web-Programmierer und Online-Marketer.
SSL erzwingen mit mod_rewrite und .htaccess
Deine Website wurde im Browser als “nicht sicher” angezeigt und du hast daraufhin ein SSL-Zertifikat installiert? Super, aber dann solltest du noch sicherstellen, dass deine Website auch nur mehr über https:// erreichbar ist.
Das geht mit dem folgenden Eintrag in der .htaccess-Datei:
# SSL erzwingen - Standard-Setup
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=308]
Sollte daraufhin deine Seite nicht mehr angezeigt werden und in einem Redirect-Loop hängen (das sagt dir dein Browser), dann verwende diese Einträge:
# SSL erzwingen - mit Reverse Proxy
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{SERVER_NAME}/%{REQUEST_URI} [L,R=308]
Erzwinge ein www. am Anfang deiner Domain – oder auch nicht
Manche Seiten haben ein www am Anfang, andere nicht. Wie du dich entscheidest, ist im Endeffekt egal, Hauptsache du bleibst bei einer Form.
Wichtig ist nur, dass du deine Seite entsprechend umleitest. Also entweder von www.deine-domain.com auf deine-domain.com oder umgekehrt. Sonst hast du ein Problem mit den Suchmaschinen (SEO).
# Umleitung von domain.com auf www.domain.com
RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$0 [R=308,L]
# Umleitung von www.domain.com auf domain.com
RewriteCond %{HTTP_HOST} ^www.domain.com
RewriteRule ^(.*)$ https://domain.com/$0 [R=308,L]
PHP konfigurieren in der .htaccess-Datei
WordPress ist in PHP programmiert, und dieses PHP kann in der “php.ini” konfiguriert werden. Das Problem? Du hast üblicherweise keinen Zugriff auf diese php.ini-Datei.
Bei manchen Hostern kannst du ein paar Einstellungen in deren Administrations-Oberfläche ändern (zum Beispiel die PHP-Version). Bei anderen Hostern geht dies über Einträge in der .htaccess-Datei. Willst du also die PHP-Version ändern, dann frage bei deinem Hoster nach, wie das geht.
Bei manchen Hostern kannst du die Einstellungen von PHP in der .htaccess vornehmen, das sieht dann zum Beispiel so aus:
php_flag display_errors off
php_flag register_globals off
php_flag max_execution_time 180
php_flag max_input_time 180
Wichtig: dies funktioniert nur bei älteren Versionen von PHP (<= 7). ab php 8 musst du die .user.ini verwenden.
Hier findest du die komplette Liste aller möglichen Einstellungen – Achtung, nicht alle Einträge können verändert werden!
PHP-Fehler loggen mit einem Eintrag in der .htaccess-Datei
Es gibt einen netten Trick, um eventuelle PHP-Fehler zu erkennen, ohne dass die Besucher der Seite das mitbekommen. Das geht mit den folgenden zwei Zeilen, der Pfad zur Log-Datei ist entsprechend anzupassen:
php_flag log_errors on
php_value error_log /www/htdocs/…/error_log.txt
Hinweis: Diese Einstellung ist vom Hoster wie auch von der verwendeten PHP-Version abhängig. Bei PHP 8 (das du verwenden solltest!) sind die entsprechenden Einstellungen in der .user.ini-Datei vorzunehmen.
Zugriff sperren mit .htaccess
Aus Sicherheitsgründen kann es erforderlich sein, dass du den Zugriff zu gewissen Ordnern sperrst. Damit hast du nur mehr mit FTP oder via SSH Zugang zu diesen Ordnern oder Dateien.
Um zum Beispiel den Zugriff zur wp-config.php-Datei zu sperren kannst du diese Zeilen verwenden:
Order allow,deny
Deny from all
Zugriff auf XML-RPC blockieren mit .htaccess
Genau den selben Mechanismus kannst du anwenden, um den Zugriff auf die xmlrpc.php zu sperren. Diese Datei erlaubt externen Applikationen (zum Beispiel der WordPress-App) auf WordPress zuzugreifen.
Das Problem dabei? Kaum jemand verwendet externe Apps, die Datei wird aber sehr gerne für Angriffe auf WordPress verwendet.
Deaktiviere daher den Zugriff auf die XML-RPC-Schnittstellen, indem du diesen Code in deine .htaccess-Datei einfügst:
# Block WordPress xmlrpc.php requests
order deny,allow
deny from all
Zugriff auf WordPress-User blockieren mit .htaccess
Bots können leider automatisch die Benutzernamen von WordPress auslesen und nutzen diese dann für automatisierte Login-Versuche. Das ist prinzipiell kein Problem, wenn du starke, sichere Kennwörter verwendest und WordPress mit einer Firewall absicherst (wie z.B. in meinem WordPress-Setup beschrieben).
Mit dem folgendem Snippet kannst du den Zugriff auf die JSON-User-API verhindern:
# Block access to user API
RewriteEngine On
RewriteRule ^wp-json/wp/v2/users - [L,F]
Freebies (PDF) vor Google-Indizierung schützen
Lädst du die PDF-Datei mit deinem Freebie in die WordPress-Mediathek oder direkt auf den Webserver hoch, dann wird dieses PDF garantiert über kurz oder lang im Google-Index landen und via Google auffindbar sein.
Das möchtest du natürlich nicht, denn dann können potentielle Kunden dein Freebie via Suchmaschine finden und lesen, ohne sich in deinen Newsletter einzutragen.
WordPress bietet keine Möglichkeit, einzelne Dateien in der Mediathek von Suchmaschinen auszuschließen.
Mit dem folgenden Snippet in deiner .htaccess-Datei kannst du aber für alle PDF-Dateien den entsprechenden HTTP-Header setzen. Dieser funktioniert technisch wie ein noindex-Meta-Tag.
# Secure PDF downloads by making them non-indexable
Header set X-Robots-Tag "noindex, nofollow"
Header set Content-Disposition attachment
Die Ladezeit verbessern mit der .htaccess-Datei
Falls das nicht schon dein Hoster für dich erledigt, kannst du mit entsprechenden Einträgen in der .htaccess-Datei die Ladezeit deiner Website verbessern, indem du
- das clientseitige Caching aktivierst. Dateien werden dann nicht mehr, bei jedem Aufruf einer neuen Seite, wiederholt vom Server geladen.
Weniger Dateien, die übertragen werden = höhere Geschwindigkeit. - die gzip-Komprimierung aktivierst. Die Dateien werden dann vor der Übertragung komprimiert.
Weniger Daten, die übertragen werden müssen = höhere Geschwindigkeit.
Das Setup für Browser-Caching sowie Komprimierung ist aber recht komplex, daher empfehle ich dir dafür ein WordPress-Plugin wie z.B. den w3 Total Cache zu verwenden. Dieses Plugin erweitert automatisch und korrekt deine .htaccess-Datei mit den entsprechenden Einträgen.
Du willst mehr über Caching erfahren? In diesem Artikel erkläre ich Caching einfach und anschaulich.
Da geht noch mehr!
Pfuh, das war jetzt ganz schön viel Info. Dabei wäre noch so viel zu sagen – du kannst zum Beispiel nicht nur einzelne Dateien sperren oder von einer URL weiterleiten, sondern auch immer sogenannte “Reguläre Ausdrücke” verwenden. Damit lassen sich echt spannende, aber auch komplizierte Lösungen erstellen.
Aber wie sagte schon Brian Moore:
“Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo.”
Dieser Artikel hat daher nur an der Oberfläche gekratzt – weitere, detaillierte werden folgen.
Lass mich wissen, wofür du die .htaccess-Datei verwendest oder an welchem Problem du dir schon einmal die Zähne ausgebissen hast.
Lass uns einfach Websites bauen,
Michael
=>
Eine Antwort
Wofür verwendest du die .htaccess-Datei?
Hallo,
ich bin von ubuntu20.04 auf debian11.8 gewechselt und jetzt geht meine htaccess und website nicht mehr. An den URLs hängt er bei der Weiterleitung ein .html an, was nicht sein sollte.
Gibt es da unterschiede?
Gruß Olli
Hallo Olli,
das kann dann eigentlich nur an einer anderen Grundkonfiguration vom Apache Webserver liegen… die htaccess selbst sollte darauf keinen Einfluss haben.
lg Michael