Você não pode corresponder a string de consulta no padrão RewriteRule
. Você precisa usar uma diretiva RewriteCond
e comparar com a variável QUERY_STRING
server.
Mas também, supondo que você tenha uma reescrita interna mais tarde no seu arquivo de configuração que reescreve de volta para a URL feia (real), então você não pode fazer um redirecionamento simples, pois isso resultará em um loop de redirecionamento. Você precisa se certificar de redirecionar apenas a solicitação inicial, não a URL reescrita.
Supondo que isso seja .htaccess
, com base no padrão RewriteRule
existente, tente o seguinte, próximo ao topo do seu arquivo de configuração:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^toolid=(/d+)$
RewriteRule ^somePage\.php$ /tool/%1 [R=301,L]
No entanto, observe que seus URLs de exemplo diferem do seu exemplo de código. Eu fui com o seu exemplo de código.
A variável de ambiente REDIRECT_STATUS
está vazia na solicitação inicial, mas é definida como "200" após uma reescrita interna bem-sucedida. Portanto, isso evita um loop de redirecionamento em arquivos .htaccess
por diretório.
Certifique-se de que você limpou o cache do seu navegador, já que qualquer 301 errôneo (durante o teste) será armazenado em cache pelo navegador.