Drücke „Enter”, um zum Inhalt zu springen.

htaccess konfigurieren – Einstellungen als Anleitung

Dan 0

Es wird etwas technischer in diesem Artikel. Wir wollen jedoch gern einmal die gängigsten .htaccess Themen in einem Artikel zusammenfassen. Leider findet man fast nie kompakte und zusammengefasste Informationen zu diesem Thema. Wir wollen das ändern 😉

Aber wozu dient eine .htaccess Datei? In dieser Datei werden Konfigurationsanweisungen für den Server hinterlegt und damit verbundene Regeln festgelegt. Zum Beispiel speichert WordPress Anweisungen in der .htaccess die für die Ausgabe der URL-Struktur zuständig sind und dem Server sagen wie er die Verzeichnisstruktur ausgeben soll. Aber auch für die Sicherheit und die schnelle Ladezeit deiner Website gibt es Einträge in der .htaccess Datei.

An den Anfang jeder .htaccess Datei muss einmal die folgende Zeile. Ohne diese läuft nichts. WordPress bringt das schon direkt beim Standardeintrag mit. Dazu erfährst du gleich mehr.

RewriteEngine On

Erster Schritt: Backup anlegen!

Wie bei allen Aktionen die du am Server bzw. an deiner Webseite vollziehst, solltest du vorher ein Backup anlegen. In unserem Fall reicht ein Backup der .htaccess. So kannst du mit der Originaldatei jederzeit den ursprünglichen Zustand wieder herstellen und deine Seite bleibt intakt.

Du solltest deine eingefügten Konfigurationsanweisungen stets kommentieren. Das geht sehr einfach in dem du über dem Code eine Zeile mit

# Hier kommt mein Kommentar zum Code

einfügst. In unseren folgenden Beispielcodes ist diese Zeile schon enthalten, damit du den Überblick behältst.

Standardinhalt für WordPress

Wie eingangs beschrieben, fügt WordPress selbsttätig einen Eintrag in deine .htaccess ein. Dieser Eintrag tt dir die Benutzung der Permalinkstruktur nach z.B. domainname/jahr/beitragsname. Sollte dieser Eintrag nicht hinterlegt sein, kannst du ihn ganz einfach in deine .htaccess Datei einfügen.

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

Bei einer WordPress Multisite Installation muss der Code z.B. anders aussehen. Mehr dazu erfährst du direkt im htaccess WordPress Codex.

Korrekte Domainumleitung

Da nicht jeder Server bzw. die direkte Domainkonfiguration richtig rund läuft, behelfen wir uns mit einer sauberen Umleitung der Domain auf die Ziel-URL die wir nutzen möchten. In unserem Fall: https://www.domainname.de/ – Wir möchten gern generell die Domain mit SSL ansprechen und auch mit www. Sollte die Domain jetzt über http://domainname.de aufgerufen werden, wird in einem Schritt direkt auf die richtige URL umgeleitet. Ob eure Domain bereits richtig konfiguriert ist, könnt ihr mit dem Redirect Checker prüfen. Falls das nicht der Fall ist, hier unser Code für das richtige umleiten der Domain.

# Domainumleitung mit https und www
RewriteCond %{HTTP_HOST} ^domainname.de [NC]
RewriteRule (.*) https://www.domainname.de/$1 [R=301,L]

Das Ergebnis ist also folgendes:

Eingabe: http://domainname.de ermöglicht die Ausgabe: https://www.domainname.de/ .

Eingabe: http://www.domainname.de ermöglicht ebenfalls die Ausgabe: https://www.domainname.de/.

Eingabe: https://domainname.de/ leitet korrekt auf: https://www.domainname.de/.

Interne URLs richtig umleiten (301)

Auf einer Webseite ändert sich gern mal etwas. Alte Blogposts werden gelöscht, URLs ändern sich aus verschiedenen Gründen. Aber meistens wird die richtige Umleitung von Alt auf Neu vergessen. Damit führen Links zu alten Artikeln ins leere und auf eine 404 Seite. Aber ein neuer Inhalt ist vielleicht viel passender oder wenigstens leitet der Link dann zu einer sinnvollen Kategorie die ähnliche Themen bietet. Wir handhaben so etwas meist händisch, ohne Plugin, und zwar so:

# Interne 301 Weiterleitungen Alt zu Neu
RedirectPermanent /mein-blogpost/ https://www.domainname.de/mein-aktueller-blogpost/

Die Eingabe von https://www.domainname.de/mein-blogpost führt somit zur Ausgabe: https://www.domainname.de/mein-aktueller-blogpost/ .

Externe Nutzung von Bildern vermeiden

Gern benutzen andere Webmaster Bilder von anderen Webseiten, sogar direkt verlinkt. Das nennt man dann Image Hotlinking. Leider geht das zu lasten deines Traffics und kann damit Performance und eventuell Geld kosten. Je nach Hostingpaket sind die Trafficmengen zum Teil begrenzt. Wir sperren diesen Zugriff nicht einfach nur, sondern fügen ein spezielles Bild hinzu was dann ausgegeben werden soll.

# Kein Image Hotlinking - Ersetzung mit speziellem Bild
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?domainname.de [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ https://domainname.de/hotlink.jpg [NC,R,L]

Achtung: Dieser Code kann einige RSS Reader beeinträchtigen die deine Bilder im RSS Feed auslesen. Das trifft allerdings nicht auf alle zu. Überprüfe am besten nach dem Einfügen des Codes, ob die gängigsten RSS Reader deine Bilder noch anzeigen oder nun das „Anti Hotlinking Image“. Du kannst natürlich ein allgemein gültiges Bild verwenden, was die Anzeige nicht beeinträchtigt.

Passwortschutz mit .htaccess/.htpasswd

Der Verzeichnisschutz mit .htaccess und .htpasswd kann in den meisten Fällen über die Konfigurationsoberfläche beim Hoster geschehen. ABER: Nicht immer funktioniert das wie gewünscht, denn einige Hoster überschreiben damit die eigene .htaccess. Somit sind alle deine Anpassungen weg. Wir machen das also selbst! Die .htaccess muss natürlich in dem zu schützenden Ordner liegen.

In deiner .htaccess legst du folgende Zeilen ab:

# Ordner mit Passwortschutz
AuthName "Admin-Bereich"
AuthType Basic
AuthUserFile /pfadzur/.htpasswd
require valid-user

Jetzt müssen wir noch den Inhalt für die .htpasswd Datei erzeugen. Am einfachsten geht das z.B. über htpasswdgenerator.de – Wir geben den gewünschten Benutzernamen in das Tool ein und das gewünschte Passwort. Verschlüsselung sollte md5 sein. Als Ergebnis bekommen wir dann in etwa so eine Zeile ausgegeben:

benutzer:$1$l\l{SWcz$gj79dl7d40HPFwGECKPJA0

Diese Zeile packen wir nun in eine leere Datei die wir dann .htpasswd nennen. Danach wird die Datei auf den Server in das Stammverzeichnis unseres Webspace geladen.

Wir benutzen diese Methode gern für den /wp-admin/ Bereich unserer Kundenwebsites auf WordPress Basis. Damit dringen potentielle Angreifer gar nicht bis zum Loginformular vor. Wir haben auch einen Beitrag zum Thema WordPress Sicherheit erstellt, in dem du mehr zum Thema erfahren kannst.

Zugriff auf bestimmte Dateien trotz Passwortschutz

Im eben von uns geschützten Ordner befindet sich nun vielleicht eine Datei auf die aber euer Design zugreift, oder einige Plugins die ihr benutzt. Im konkreten Fall wäre das die admin-ajax.php im /wp-admin/ Ordner. Wir ermöglichen also den Zugriff auf diese eine Datei, trotz Passwortschutz.

# Zugriff auf admin-ajax.php zulassen
<Files admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any
</Files>

Zugriff auf bestimmte Dateien verbieten

Im umgekehrten Fall kann man aber auch einzelne Dateien ausschließen die von außen nicht aufgerufen werden können. So lassen sich Dateien vor unerwünschten Zugriffen schützen.

# Zugriff auf bestimmte Datei verhindern
 <files datei.php>
 order allow,deny
 deny from all
 satisfy all
 </files>

Trailing Slash anfügen

Je nach Konfiguration des CMS ist es sinnvoll den Trailing-Slash anzufügen, da es ansonsten zwei URLs geben kann. Also beispielsweise

http://was-mit-internet.de/unterseite/ und zeitgleich

http://was-mit-internet.de/unterseite

Dieser Umstand lässt sich wie folgt vermeiden.

##Add a Trailing slash##
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ https://www.domainname.tld/$1/ [L,R=301]

Caching aktivieren

Schlechte Ladezeiten sind ein Killer für alle Webseiten. Wer möchte schon lange warten bis die Inhalte geladen sind? Aber wie kriegt man das nun in den Griff? Viele Systeme bringen so etwas nicht unbedingt von den Werkseinstellungen direkt mit. Aber man kann sich sehr einfach behelfen. Wir teilen das ganze in verschiedene Bereiche auf.

Browsercaching

Hiermit gebt Ihr dem Browser Anweisungen, wie er mit den Inhalten eurer Seite umzugehen hat. In dem Falle wollen wir dem Browser mitteilen er soll nicht bei jedem Seitenaufruf alle Ressourcen, wie Grafiken & Javascript, neu laden. Anstatten greift er auf seinen eigenen Cache zurück und spart damit Ladezeit. Aktivieren könnt ihr das mit folgenden Zeilen in der .htaccess:

# Browser Caching
ExpiresActive On
ExpiresByType image/jpg "access 1 month"
ExpiresByType image/jpeg "access 1 month"
ExpiresByType image/gif "access 1 month"
ExpiresByType image/png "access 1 month"
ExpiresByType image/x-icon "access 1 month"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresDefault "access 3 days"

GZIP Komprimierung aktivieren

Im nächsten Schritt werden wir das ganze noch komprimieren und damit die zu übertragende Datenmenge reduzieren. Die meisten Server, auch bei Webhostingpaketen, können damit umgehen und haben die entsprechende Funktion GZIP aktiviert. Mit dem GZIP compression Testing Tool kannst du vorab prüfen ob bereits GZIP aktiv ist. Dort siehst du nach der Einbindung auch ob alles funktioniert und wie viel eingespart wird. Nicht alle Server unterstützen die folgende Variante.

# GZIP Komprimierung aktivieren
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

mod_deflate aktivieren

Nun wenden wir noch mod_deflate an um das endgültige Resultat zu erzielen, welches wir anstreben. Kompression aller Ressourcen!

# mod_deflate aktivieren
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/vtt 
AddOutputFilterByType DEFLATE text/x-component
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/js
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE application/atom+xml 
AddOutputFilterByType DEFLATE application/json
AddOutputFilterByType DEFLATE application/ld+json 
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject 
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/font-woff2
AddOutputFilterByType DEFLATE application/x-font-woff
AddOutputFilterByType DEFLATE application/x-web-app-manifest+json font/woff
AddOutputFilterByType DEFLATE font/woff 
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon 
</IfModule>

Auslesen der Benutzer verhindern (WordPress spezifisch)

WordPress bietet die Option über domainname.de/?author=1 den Benutzer auszulesen, welcher hinter der ID 1 steht. Du wirst also direkt auf die entsprechende Autorenseite von ID 1 weitergeleitet. So könnten Benutzernamen für Loginversuche sehr einfach ausgelesen werden. Um das etwas zu erschweren, bauen wir einen weiteren Codeschnipsel in die .htaccess eures WordPress ein. Natürlich bietet das ganze nur eine kleine Hürde, aber so werden solche Ausleseversuche direkt auf die Startseite des Blogs geleitet.

# Auslesen der Benutzer verhindern
RewriteCond %{QUERY_STRING} .*author=(.+.?) [NC]
RewriteRule (.*) /?author= [NC,L,R=301]

Download .htaccess für WordPress

Wir haben dir eine .htaccess für dein WordPress vorbereitet. Bitte achte aber darauf, ob deine .htaccess Datei nicht schon andere Einträge durch Plugins erhalten hat. Das könnte sonst zu Problemen führen. Du bist dir nicht sicher? Dann melde dich gern bei uns.

Download .htaccess – WP

Download .htaccess für Webseite

Du hast eine normale Website, möchtest aber trotzdem die Hacks unseres Beitrags anwenden? Kein Problem, wir haben dir eine .htaccess vorbereitet.  Bitte achte darauf, dass evtl dein System bereits eine .htaccess Datei angelegt hat.

Download .htaccess – Web

Schreibe einen Kommentar

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