Zum Hauptmenü

Apache Error AH10411

Jörg Kruse

Seit der Version 2.4.54 des Webservers Apache rewritet das Modul mod_rewrite keine Leerzeichen mehr. Im Error-Log wird in so einem Fall dieser Fehler ausgegeben:

AH10411: Rewritten query string contains control characters or spaces

Ausgelöst wird der Fehler beispielsweise durch folgenden Rewrite in der .htaccess oder VirtualHost-Datei:

RewriteEngine on
RewriteRule ^/?([^/^\.]+)$ index.php?message=$1 [L]

Das Pattern ([^/^\.]+) erfasst hierbei alle Zeichen, außer den Slash und den Punkt. In älteren Apache-Versionen wurde die URL example.com/error%20ah10411 hierbei auf den Pfad /index.php?message=error%20ah10411 umgeschrieben. Wegen des codierten Leerzeichens %20 in der URL verweigern Apache-Versionen ab 2.4.54 den Rewrite mit einem HTTP-Status-Code 403 „Forbidden“ und der Fehlermeldung AH10411 im Error Log.

Mit einer Beschränkung auf Zeichen ohne das Leerzeichen kann dieser Fehler vermieden werden, z.B.:

RewriteRule ^/?([a-zA-Z0-9-]+)$ index.php?message=$1 [L]

In diesem Fall führt allerdings der Aufruf der URL example.com/error%20ah10411 zu einem HTTP-Status-Code 404 „Not found“

Sollen URLs mit Leerzeichen weiter umgeschrieben werden, können codierte Steuerzeichen mithilfe des mod_rewrite-Flags [B] explizit wieder für den Rewrite zugelassen werden:

RewriteRule ^/?([^/^\.]+)$ index.php?message=$1 [B,L]

Hier erfolgt der Rewrite wieder auf den Pfad /index.php?message=error%20ah10411 und der Apache gibt den HTTP-Status-Code 200 aus.

Das Flag [B] kann seit Apache 2.4.26 sicherheitshalber auch auf einzelne Zeichen beschränkt werden, wie z.B. das Leerzeichen und das „?“:

RewriteRule ^/?([a-zA-Z0-9\ -]+)$ index.php?message=$1 "[B= ?,L]"

Das dritte Argument der RewriteRule muss hierbei wegen des enthaltenen Leerzeichens gequotet werden.

Tags: Apache

Kommentar schreiben

Erlaubte HTML-Tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Kommentare werden erst nach Freischaltung veröffentlicht