25. März 2020

.htaccess:
404-Fehlerseiten von statischen Dateien durch Apache statt WordPress ausliefern

Gute Cache-Plugins für WordPress liefern für die meisten Zugriffe die Website direkt über den Webserver aus, ohne erst langwierig WordPress zu starten und Datenbankabfragen durchzuführen. Wird jedoch zum Beispiel auf ein nicht vorhandenes Bild zugegriffen, passiert in der Regel genau das, was man als Website-Betreiber nicht will: WordPress wird gestartet um zu prüfen, ob die URL eventuell doch gültig ist und was anschließend passieren soll.

Und das kann auf stark frequentierten Websites zum Problem werden, auch wenn man eigentlich keine 404-Fehler auf der Website hat:

Browser suchen unaufgefordert nach bestimmten Touch-Icons und Bots nach Sicherheitslücken. Je nach Hosting und Besucher- beziehungsweise Bot-Andrang können diese Anfragen die Performance der Website deutlich verschlechtern.

Mit diesen Anweisungen für die htaccess-Datei wird WordPress bei 404-Fehlern von statischen Dateien umgangen und der Apache-Webserver antwortet direkt und deutlich ressourcen-schonender mit einer schlichten Fehlerseite:

# 404-Fehler von statischen Dateien durch Apache statt WordPress ausliefern
<IfModule mod_rewrite.c> 
	RewriteEngine On 
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d

	# Multisite check – nicht benötigt für normale WordPress-Installationen
	RewriteCond %{REQUEST_URI} [_0-9a-zA-Z-]+/(wp-(content|admin|includes).*)
	RewriteRule ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]

	RewriteCond %{REQUEST_URI} !(robots.txt|[a-z0-9_-]*sitemap[a-z0-9_-]*.(xml|xsl|html)(.gz)?) 
	RewriteCond %{REQUEST_URI} .(css|htc|less|js|js2|js3|js4|html|htm|rtf|rtx|svg|txt|xsd|xsl|xml|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|webp|json|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|_otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|_ttf|wav|wma|wri|woff|woff2|xla|xls|xlsx|xlt|xlw|zip)$ [NC] 
	RewriteRule .* - [L] 
</IfModule>

Normale Besucher bekommen davon in der Regel nichts mit, da 404-Meldungen zu Seiten oder Beiträgen immer noch von WordPress im passenden Website-Design beantwortet werden.