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.