Ich habe eine Website, die mod_rewrite
einige saubere URLs und benutzerdefinierte 404-Seiten erhält. Meine .htaccess
Datei sieht folgendermaßen aus:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?clean_url=$1 [QSA,L]
</IfModule>
Was mich verwirrt ist, dass der Server eine 404-Fehlermeldung zu erzwingen scheint, wenn die URL eine %2F
(URL-codierte ) enthält. Das wäre /
beispielsweise ein normaler Artikel, der dann aber eine vom Server generierte 404-Seite ausgibt. (Nicht die benutzerdefinierte 404-Seite)http://example.com/category/article
http://example.com/category%2farticle
Damit hätte ich nicht gerechnet... warum passiert das? Gibt es einen Weg, das zu umgehen?
Antwort1
Die URLs http://example.com/category/article
und http://example.com/category%2farticle
sind nicht gleich.RFC 2616 §3.2.3, reservierte Zeichen haben eine besondere Bedeutung (was letztlich der Sinn des URL-Escapens ist). RFC 2396 §2.2Listen sind /
als solches reservierte Zeichen. Begrenzt im Kontext von HTTP-URLs /
Pfadelemente, während %2f
es sich um einen wörtlichen Schrägstrich handelt.
In ApacheAllowEncodedSlashes On
würde verhindern, dass die Anfrage sofort mit einer 404 abgelehnt wird.