Eu tenho um site usado mod_rewrite
para obter alguns URLs limpos e páginas 404 personalizadas. Meu .htaccess
arquivo está assim:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?clean_url=$1 [QSA,L]
</IfModule>
O que me intriga é que se a URL contiver um %2F
(url-encoded /
) o servidor parece forçar um 404. Por exemplo, http://example.com/category/article
seria um artigo normal, mas depois http://example.com/category%2farticle
fornece uma página 404 gerada pelo servidor. (não a página 404 personalizada)
Eu não esperava isso... por que isso está acontecendo? Existe uma maneira de contornar isso?
Responder1
Os URLs http://example.com/category/article
e http://example.com/category%2farticle
não são iguais. De acordo comRFC 2616 §3.2.3, os caracteres reservados têm um significado especial (que é, afinal, o objetivo do escape de URL). RFC 2396 §2.2lista /
como um caractere reservado. No contexto de URLs HTTP, /
delimita os elementos do caminho, enquanto %2f
é uma barra literal.
No Apache,AllowEncodedSlashes On
impediria que a solicitação fosse imediatamente rejeitada com um 404.