Você não pode impedir que o Apache decodifique esses caracteres codificados em% na variável de servidor PATH_INFO
do Apache (que o PHP atribui posteriormente ao $_SERVER['PATH_INFO']
superglobal, aparentemente inalterado).
A diretiva AllowEncodedSlashes
é um caso especial. Este é realmente um "recurso de segurança". Por padrão, uma barra codificada ( %2F
) na parte do caminho da URL aciona uma resposta 404 gerada pelo sistema . A diretiva AllowEncodedSlashes
permite que a solicitação passe para o aplicativo (a opção NoDecode
foi adicionada somente depois).
Se você quiser ler% -ocoded PATH_INFO
no PHP, considere o uso de uma variável $_SERVER
diferente, como $_SERVER['REQUEST_URI']
, que não é% -decoded, mas isso exigirá uma análise adicional. (Observe que o PHP superglobal $_SERVER['REQUEST_URI']
é diferente da variável do servidor Apache com o mesmo nome, que é% -decoded e pode se referir a uma URL diferente inteiramente se a URL estiver sendo reescrita!)
No entanto, se você quiser ler% -ocoded PATH_INFO
com o Apache (usando mod_rewrite), considere analisar a variável THE_REQUEST
server, que contém todo o cabeçalho da solicitação, conforme enviado pelo cliente. Esta variável não é% -decoded. Isso poderia ser atribuído a uma variável de ambiente ou até mesmo a um parâmetro de URL e lido pelo PHP dessa maneira. (Observe que a variável QUERY_STRING
server e o correspondente $_SERVER['QUERY_STRING']
superglobal não são decodificados em%, mas o PHP decodifica os valores dos parâmetros individuais no array $_GET
.)