WordPress optimieren mit der .htaccess

Startseite » Artikel » WordPress optimieren mit der .htaccess

Apache ist ein leistungsfähiger Webserver, der sich gut für die Verwendung mit WordPress eignet. WordPress.org empfiehlt Apache aufgrund seiner zahlreichen Erweiterungen und seiner etablierten Community und Ressourcen. Die .htaccess-Datei kann genutzt werden, um die Performance und Sicherheit von WordPress zu verbessern. Sie kann auch für andere Anwendungen verwendet werden, da sowohl Apache als auch NGINX sie lesen können.

Autoren-Scans blockieren

Autoren-Scans auf Ihrer WordPress-Website blockieren. Der Code verwendet die Regeln “RewriteCond” und “RewriteRule”, um URLs zu blockieren, die entweder mit “/wp-json/wp/v2/users” beginnen oder eine Abfragezeichenfolge enthalten, die mit “author=” beginnt und eine Zahl enthält. Die Regel “RewriteRule” blockiert dann den Zugriff mit dem “F”-Flag.

#Blockieren von WordPress Author Scans
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/wp-json/wp/v2/users [OR]
RewriteCond %{QUERY_STRING} (author=\d+) [NC]
RewriteRule ^ – [NC,F,L]
</ifModule>

Hotlinking verhindern

Hotlinking bezieht sich auf die Praxis, Bilder, Videos oder andere Medien von einer anderen Website in eine eigene Website einzubetten, anstatt diese Inhalte auf der eigenen Website zu hosten. Dies kann zu einer Belastung der Ressourcen der ursprünglichen Website führen und kann als Bildklau betrachtet werden, wenn keine Genehmigung eingeholt wurde.

Um Hotlinking zu verhindern, können Sie die folgende Regel in Ihrer .htaccess-Datei verwenden.

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{HTTP_REFERER}     !^$
 RewriteCond %{REQUEST_FILENAME} -f
 RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g?|png)$           [NC]
 RewriteCond %{HTTP_REFERER}     !^https?://([^.]+\.)?deine_Domain\. [NC]
 RewriteRule \.(gif|jpe?g?|png)$                             - [F,NC,L]
</ifModule>

HTTP zu HTTPS Umleitung

Wenn Sie HTTPS verwenden, um die Sicherheit Ihrer Website zu erhöhen, ist es wichtig, dass alle Anfragen, die an Ihre Website gesendet werden, automatisch auf HTTPS umgeleitet werden. Sie können dies mit folgendem Code in der .htaccess-Datei tun:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Cross-Origin Resource Sharing (CORS) aktivieren

CORS aktivieren für bestimmte Dateitypen: Wenn Ihre Website Inhalte von anderen Websites einbindet, wie z.B. Bilder oder Videos, müssen Sie möglicherweise Cross-Origin Resource Sharing (CORS) aktivieren, um sicherzustellen, dass diese Ressourcen von Ihrer Website aus aufgerufen werden können. Sie können dies mit folgendem Code in der .htaccess-Datei tun:

<IfModule mod_headers.c>
  <FilesMatch "\.(eot|font.css|otf|ttc|ttf|woff)$">
    Header set Access-Control-Allow-Origin "*"
  </FilesMatch>
</IfModule>

Block Nuisance Requests (lästige Anfragen blocken)

Block Nuisance Requests (lästige Anfragen blocken): Manche Benutzer können versuchen, lästige oder schädliche Anfragen an Ihre Website zu senden, die die Performance beeinträchtigen können. Sie können diese Anfragen blockieren, indem Sie den folgenden Code in Ihrer .htaccess-Datei verwenden:

RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} /wp-login.php
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?deine_domain\.tld [NC]
RewriteRule .* - [F]

ReallyLongRequest

Der “ReallyLongRequest”-Bandit ist eine Art von Angriff, bei dem ein Hacker versucht, Ihre Website durch die Verwendung von sehr langen Anfragen oder durch das Scannen der URLs Ihrer Website zu überlasten oder zum Absturz zu bringen. Diese Art von Angriff kann dazu führen, dass Ihre Website langsam oder unzuverlässig wird, was für Ihre Benutzer frustrierend sein kann.

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_METHOD} .* [NC]
    RewriteCond %{THE_REQUEST}  (YesThisIsAReallyLongRequest|ScanningForResearchPurpose) [NC,OR]
    RewriteCond %{QUERY_STRING} (YesThisIsAReallyLongRequest|ScanningForResearchPurpose) [NC]
    RewriteRule .* - [F,L]
</IfModule>

HTTP-Security-Header

Dieser Code setzt verschiedene HTTP-Security-Header, die dazu beitragen können, die Sicherheit deiner Website zu erhöhen.

  • Der X-Frame-Options-Header gibt an, ob eine Seite in einem Frame oder IFrame angezeigt werden darf. Mit dem Wert “sameorigin” wird verhindert, dass die Seite in einem Frame von einer anderen Domain angezeigt wird.
  • Der Referrer-Policy-Header legt fest, wie der Referrer (die URL der Quelle, von der der Benutzer auf die aktuelle Seite gekommen ist) übertragen wird. Mit dem Wert “strict-origin-when-cross-origin” wird der Referrer nur dann übertragen, wenn die Quelle und das Ziel auf derselben Domain liegen.
  • Der X-XSS-Protection-Header aktiviert die Cross-Site-Scripting-Schutzfunktion des Browsers. Mit dem Wert “1; mode=block” werden mögliche Angriffe blockiert.
  • Der X-Content-Type-Options-Header verhindert, dass der Browser eine Datei als einen anderen Dateityp interpretiert, als sie tatsächlich ist. Mit dem Wert “nosniff” wird diese Funktion aktiviert.
  • Der Strict-Transport-Security-Header gibt an, dass die Seite nur über eine sichere Verbindung (HTTPS) aufgerufen werden soll. Mit dem Wert “max-age=31536000; includeSubDomains; preload” wird festgelegt, dass diese Anweisung für ein Jahr gültig ist und auch für alle Subdomains der Domain gilt.
  • Der Content-Security-Policy-Header legt fest, wie der Browser Inhalte von externen Quellen behandeln soll. Mit dem Wert “upgrade-insecure-requests” werden alle ungesicherten Anfragen (HTTP) auf sichere Anfragen (HTTPS) umgeleitet.
  • Der Permissions-Policy-Header gibt an, welche Funktionen und APIs der Browser auf einer Website verwenden darf.
# X-FRAME-OPTIONS-Header
<IfModule mod_headers.c>
    Header set X-Frame-Options "sameorigin"
</IfModule>
## Strict Origin when cross origin Header
<IfModule mod_headers.c>
    Header set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>
# X-XSS-PROTECTION-Header
<IfModule mod_headers.c>
    Header set X-XSS-Protection "1; mode=block"
</IfModule>
# X-Content-Type-Options-Header
<IfModule mod_headers.c>
    Header set X-Content-Type-Options "nosniff"
</IfModule>
# Strict-Transport-Security-Header - für HTTPS
<IfModule mod_headers.c>
   Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>
# Upgrade Insecure Requests to prevent mixed content
<ifModule mod_headers.c>
  Header always set Content-Security-Policy "upgrade-insecure-requests"
</IfModule>
# Permissions Policy
<IfModule mod_headers.c>
Header always set Permissions-Policy "geolocation=(), midi=(),sync-xhr=(),accelerometer=(), gyroscope=(), magnetometer=(), camera=(), fullscreen=(self)"
</IfModule>

Dateien komprimieren und cachen

Eine Möglichkeit, die Ladezeiten Ihrer Website zu verbessern, ist das Komprimieren von Dateien und das Caching von statischen Ressourcen. Sie können dies mit folgendem Code in der .htaccess-Datei tun:

<IfModule mod_deflate.c>
  # Compress HTML, CSS, JavaScript, Text, XML and fonts
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/rss+xml
  AddOutputFilterByType
  # Compress HTML, CSS, JavaScript, Text, XML and fonts
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/rss+xml
   AddOutputFilterByType DEFLATE application/x-font
  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/javascript
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/xml
  # Remove browser bugs (only needed for really old browsers)
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  Header append Vary User-Agent
</IfModule>
# Expires headers 
<IfModule mod_expires.c>
  ExpiresActive on
  ExpiresByType image/jpg "access 1 year"
  ExpiresByType image/jpeg "access 1 year"
  ExpiresByType image/gif "access 1 year"
  ExpiresByType image/png "access 1 year"
  ExpiresByType text/css "access 1year"
 ExpiresByType application/pdf "access 1 year"
  ExpiresByType text/x-javascript "access 1 year"
  ExpiresByType application/x-shockwave-flash "access 1 year"
  ExpiresByType image/x-icon "access 1 year"
  ExpiresDefault "access 2 days"
</IfModule>
# Cache-Control Headers
<IfModule mod_headers.c>
  <filesMatch "\.(ico|jpe?g|png|gif|swf)$">
    Header set Cache-Control "public"
  </filesMatch>
  <filesMatch "\.(css)$">
    Header set Cache-Control "public"
  </filesMatch>
  <filesMatch "\.(js)$">
    Header set Cache-Control "private"
  </filesMatch>
  <filesMatch "\.(x?html?|php)$">
    Header set Cache-Control "private, must-revalidate"
  </filesMatch>
</IfModule>

WordPress-Dateien gegen Zugriff blocken

Es gibt bestimmte WordPress-Dateien, die für normale Benutzer nicht zugänglich sein sollten, wie z.B. die Datei “wp-config.php”, die sensibles Informationen wie Ihre Datenbank-Anmeldeinformationen enthält. Sie können den Zugriff auf diese Dateien blockieren, indem Sie den folgenden Code in Ihrer .htaccess-Datei verwenden:

# kein Zugriff auf wp-config.php 
<files wp-config.php>
Order allow,deny
Deny from all
</files>
 
# kein Zugriff auf readme.html
<files readme.html>
 Order Allow,Deny
 Deny from all
 Satisfy all
</Files>
 
# kein Zugriff auf liesmich.html oder readme.html für Deutsch
<Files liesmich.html>
 Order Allow,Deny
 Deny from all
 Satisfy all
</Files>
 
# kein Zugriff auf log access 
<files error_log>
Order allow,deny
Deny from all
</files>
# kein Zugriff auf install.php
<files install.php>
Order allow,deny
Deny from all
</files>
# kein Zugriff auf .htaccess und .htpasswd
<FilesMatch "(\.htaccess|\.htpasswd)">
  Order deny,allow
  Deny from all
</FilesMatch>
# kein Zugriff auf includes ordner
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

XML-RPC sperren

XML-RPC ist ein Netzwerkprotokoll, das von WordPress verwendet wird, um Remote-Methodenaufrufe zu ermöglichen. Beispielsweise können Sie die XML-RPC-Schnittstelle von WordPress verwenden, um Posts von einem externen Programm oder von einem anderen WordPress-Blog zu veröffentlichen.

In manchen Fällen könnten jedoch bösartige Benutzer versuchen, die XML-RPC-Schnittstelle von WordPress auszunutzen, um Angriffe auf Ihre Website durchzuführen. Dazu gehören DDoS-Angriffe (Distributed Denial of Service), bei denen eine große Anzahl von Anfragen an Ihre Website gesendet wird, um sie zum Absturz zu bringen.

Allerdings gibt es auch Nachteile für das Sperren von XML-RPC. Wenn Sie beispielsweise Remote-Methodenaufrufe über XML-RPC verwenden möchten, wie das Veröffentlichen von Posts von einem externen Programm oder von einem anderen WordPress-Blog, wird dies durch das Sperren von XML-RPC verhindert.

<Files xmlrpc.php>
  Order Deny,Allow
  Deny from all
</Files>

Referrer Header

Ein “Referrer” ist die URL einer Webseite, von der ein Benutzer auf eine andere Webseite verlinkt wurde. Wenn ein Benutzer beispielsweise von der Webseite “A” zu der Webseite “B” navigiert, wird die URL der Webseite “A” als Referrer im Header der Anfrage an die Webseite “B” gesendet.

Manchmal möchten Sie möglicherweise verhindern, dass Referrer-Informationen gesendet werden, um die Privatsphäre der Benutzer Ihrer Website zu schützen. Sie können dies erreichen, indem Sie den “Referrer”-Header in Ihrem Apache-Server konfigurieren.

# Kein-Referrer-Header
<IfModule mod_headers.c>
    Header set Referrer-Policy "no-referrer"
</IfModule>

Ich hoffe dieser Artikel hilft Ihnen bei Ihrem WordPress Projekt. Ich würde mich über Kommentare sehr freuen.

Autor: Volkan Sah