Tengo un sitio web que utiliza mod_rewrite
para obtener algunas URL limpias y páginas 404 personalizadas. Mi .htaccess
archivo se ve así:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?clean_url=$1 [QSA,L]
</IfModule>
Lo que me desconcierta es que si la URL contiene un %2F
(codificado en URL /
), el servidor parece forzar un 404. Como ejemplo, http://example.com/category/article
sería un artículo normal, pero luego http://example.com/category%2farticle
muestra una página 404 generada por el servidor. (no la página 404 personalizada)
No hubiera esperado esto... ¿por qué está pasando esto? ¿Hay alguna forma de evitarlo?
Respuesta1
Las URL http://example.com/category/article
y http://example.com/category%2farticle
no son iguales. De acuerdo aRFC 2616 §3.2.3, los caracteres reservados tienen un significado especial (que es, después de todo, el objetivo del escape de URL). RFC 2396 §2.2enumera /
como tal un personaje reservado. En el contexto de las URL HTTP, /
delimita los elementos de la ruta, mientras que %2f
es una barra diagonal literal.
en apache,AllowEncodedSlashes On
evitaría que la solicitud sea rechazada inmediatamente con un 404.