Limpar URLs com mod rewrite e caracteres URL Encoded causa 404?

1

Eu tenho um site usando mod_rewrite para obter alguns URLs limpos e páginas 404 personalizadas. Meu arquivo .htaccess é 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 o URL contiver um %2F (codificado em url / ), o servidor parece forçar um 404. Como exemplo, http://example.com/category/article seria um artigo normal, mas 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 ... porque isso está acontecendo? Existe uma maneira de contornar isso?

    
por LeguRi 03.06.2010 / 19:16

1 resposta

1

As URLs http://example.com/category/article e http://example.com/category%2farticle não são iguais. De acordo com RFC 2616 §3.2.3 , os caracteres reservados têm significado especial (o que é, afinal de contas, todo o sentido do escape de URL). RFC 2396 §2.2 lista / como um caractere reservado. No contexto de URLs HTTP, / delimita elementos de caminho, enquanto %2f é uma barra literal.

No Apache, AllowEncodedSlashes On impediria que a solicitação fosse imediatamente rejeitada um 404.

    
por 27.01.2011 / 00:51