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 .)