
Eine der wichtigsten Stellschrauben an einem Webserver ist die .htaccess-Datei. Bei einem Apache Server können Systemvariablen entweder über die php.ini oder oft über die .htaccess-Datei verändert werden.
Auch WordPress arbeitet mit einer .htaccess und steuert in der Standard-Variante das Aussehen der Seitenlinks auf Deiner Webseite. Sie sorgt also für die Umsetzung von sogenannten SEO-URLs. Die .htaccess-Datei findest du im Grundverzeichnis deiner WordPress-Installation. Dort wo auch die wp-config.php und die index.php zu finden ist.
# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Hast du Deine .htaccess gelöscht, kannst du dir die WordPress .htaccess hier einfach herunterladen:
Kopiere diese Datei in das Grundverzeichnis des WordPress.
Auch weitere Einstellungen lassen sich in dieser Datei setzen. Voraussetzung ist dabei: dein Hoster unterstützt das. Hier eine Übersicht der wichtigsten Befehle für die .htaccess bei WordPress.
Dieser Wert bestimmt wie lange ein PHP-Script laufen darf, bis es vom Server abgebrochen wird. Eine höhere Execution-Time wird zum Beispiel benötigt, wenn ein Backup generiert wird. Woran erkennst du, dass du eine höhere Laufzeit benötigst? Im Error-Log oder beim Aufruf des Scriptes erhälst Du nach einer bestimmten Zeit diese Fehlermeldung:
Fatal error: Maximum execution time of 30 seconds exceeded in /pfad/zur/datei.php
Es kann auch sein, dass der Server nach Ablauf der Zeit den Aufruf mit einem Fehler 500 abbricht. Mit diesem Eintrag in die .htaccess erhöhst du die erlaubte Scriptlaufzeit:
php_value max_execution_time 300
Die „300“ steht in diesem Fall für die Zeit in Sekunden.
Wichtig: Du solltest den Wert immer mit Bedacht setzen. Ein zu hoher Wert in Verbindung mit einem fehlerhaften Script kann zu großen Problemen bis hin zum Absturz des Servers führen.
Das Memory Limit bestimmt, wie viel Arbeitsspeicher ein PHP-Script verwenden darf. Wird der Wert überschritten, so bricht das Script ab. Sehr speicherintensive Plugins wie z.B. der Pagebuilder Elementor Pro führen oft zu Fehlermeldungen ähnlich dieser hier:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54 bytes)
Du kannst das Speicherlimit erhöhen, indem du folgenden Eintrag in die .htaccess-Datei schreibst:
php_value memory_limit 256M
Die 256M stehen in diesem Beispiel für 256 MegaByte des Arbeitsspeichers des Servers
Auch hier ist Vorsicht geboten: Angenommen Du setzt einen Wert von 16GB. Bei einem Fehler in deinem PHP-Script hätte dies zur Folge, dass 16GB des Server-RAMs vollgeschrieben werden. Gerade im Shared Hosting (mehrere Kunden teilen sich einen Server) bedeutet das den sicheren Serverabsturz. Setze den Wert immer entsprechend der Voraussetzungen des Plugin/Theme-Anbieters. Achte dabei stets auf die Vorgaben deines Webhosters.
Die Kompressionsmethode gzip findet mittlerweile auf fast allen Webservern Anwendung. Die Funktionsweise ist dabei sehr einfach: Wiederholt auftauchende Zeichenketten werden durch eine Referenz zur bereits bestehenden Zeichenkette ersetzt. Taucht eine Kette nicht mehrfach auf, so wird diese unkomprimiert in das Datenpaket geschrieben. Hierdurch kann gzip bis zu 80% der übertragenen Daten einsparen.
Die Vorteile liegen also auf der Hand: Weniger Datentransfer bedeutet schnellere Webseite. Und dies sorgt für eine bessere Nutzbarkeit der Webseite. Die Nutzung von gzip hat also unter Umständen einen direkten Einfluss auf das Ranking deiner Webseite.
Wie wird gzip aktiviert?
Trage dazu den folgenden Code in deine .htaccess-Datei im Grundverzeichnis deiner WordPress-Installation ein:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/shtml
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
</IfModule>
Sobald du die Einträge gesetzt hast, kannst du unter https://www.giftofspeed.com/gzip-test/ prüfen ob gzip funktioniert.
Um die Funktionsweise der Expire-Headers zu verstehen, solltest du wissen: eine Webseite besteht aus einer Reihe von statischen Dateien (CSS, Javascripts, etc), die sich selten ändern. Es macht also keinen großen Sinn diese Dateien bei jedem Seitenaufruf erneut herunterzuladen. Aus diesem Grund setzt du gezielt Einträge, die dem Browser mitteilen, wann er welche Dateien erneut vom Server anfordern soll.
Der Vorteil liegt also darin, dass auch hier weniger Datentransfer stattfinden muss, wenn die Seite zu einem früheren Zeitpunkt schon einmal geladen wurde. Ein Beispieleintrag sieht so aus:
ExpiresByType image/jpeg „access plus 1 year“
Kurz übersetzt: Rufe die Bilder der Seite ein Jahr nach dem ersten Aufruf der Seite erneut vom Server ab. Bis dahin nutze den Browsercache.
Eine vollständige Liste für Expire-Headers sieht folgendermaßen aus. Schreibe dies an das Ende der .htaccess-Datei und speichere ab:
<IfModule mod_expires.c>
ExpiresActive On
# Expire-Headers für CSS, JavaScript
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
# Expire-Headers für Videos
ExpiresByType video/mp4 "access plus 1 year"
ExpiresByType video/mpeg "access plus 1 year"
# Expire-Headers für Bilder
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
# andere (zB pdf)
ExpiresByType application/pdf "access plus 1 month"
</IfModule>
Du kannst prüfen ob die Expire-Header korrekt gesetzt sind, wenn du in der Netzwerkanalyse deines Browsers (Strg + Shift + E) eine der Dateien im Wasserdiagramm anklickst. Auf der rechten Seite siehst Du die Header-Einträge:
Im Browser erkennt man ob die Webseite die Expire-Headers verwendet.