¿Limpiar URL con reescritura de mod y caracteres codificados en URL causa 404?

¿Limpiar URL con reescritura de mod y caracteres codificados en URL causa 404?

Tengo un sitio web que utiliza mod_rewritepara obtener algunas URL limpias y páginas 404 personalizadas. Mi .htaccessarchivo 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/articlesería un artículo normal, pero luego http://example.com/category%2farticlemuestra 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/articley http://example.com/category%2farticleno 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 %2fes una barra diagonal literal.

en apache,AllowEncodedSlashes Onevitaría que la solicitud sea rechazada inmediatamente con un 404.

información relacionada