Esta é a regra original, com [L]
adicionado para denotar "last":
RewriteRule ^(.*)%25(.*)$ $1%$2 [L,R=301]
Depois disso, há alguns problemas aqui. Primeiro, sinais de porcentagem em padrões RewriteRule
têm um significado especial; eles denotam o início de uma referência de volta a um RewriteCond
. Você pode contornar isso escapando deles (usando uma barra invertida):
RewriteRule ^(.*)\%25(.*)$ $1%$2 [L,R=301]
Em segundo lugar, quando você insere um %
em para a substituição, ele não passa a tratar isso como parte de uma peça uri-codificada. Isso se traduz em um sinal de porcentagem literal. No URL original que você está recebendo, o primeiro %25"
é convertido em um sinal de porcentagem literal também. Assim, a regra acima resultará em literal %25
s ou literal %2b
na URL, em vez de resolver em %
ou +
. Então você tem que resolver isso manualmente.
RewriteRule ^(.*)\%25(.*)$ $1%$2
RewriteRule ^(.*)\%2b(.*)$ $1+$2 [L,R=301]
Por fim, como você não tem apenas um único 25
após o %
inicial, mas potencialmente muitos, use [N]
para indicar "próximo". Isso significa basicamente "iniciar o processo desde o início, mas usar meu novo URL como entrada". Então, isso lidará com qualquer número de 25
s após o percentual:
RewriteRule ^(.*)\%25(.*)$ $1%$2 [N]
RewriteRule ^(.*)\%2b(.*)$ $1+$2 [L,R=301]
Nota: Isso deve funcionar se você estiver configurando sua regra nas configurações regulares do apache. Se você estiver configurando como .htaccess
, as barras iniciais serão omitidas da sequência verificada na regex, e nesse caso você terá que adicioná-las novamente:
RewriteRule ^(.*)\%25(.*)$ /$1%$2 [N]
RewriteRule ^(.*)\%2b(.*)$ /$1+$2 [L,R=301]
UPDATE : Eu não tenho a habilidade de testar agora, mas olhando para os documentos, acabei de ver uma opção NE
para "no escape" que faz com que as porcentagens funcionem como codificação regular marcadores no resultado. Se bem entendi, isso significa que a regra pode ser simplificada para isso:
RewriteRule ^(.*)\%25(.*)$ $1%$2 [NE,N,L,R=301]
Mas, novamente, isso não foi testado e, na verdade, nunca usei o NE
, então posso estar interpretando mal. Se você testar isso e achar que funciona, avise-me e removerei este UPDATE e corrija a resposta acima para incluir essa versão mais simples.