Reescreva a regra para reescrever URLs antigos a bonitos

1

Eu quero que https://www.example.com/somePage.php?id=1234 seja redirecionado para https://www.example.com/tool/1234 (para que os links e marcadores herdados funcionem).

Acho que estou perto, mas parece que isso não funciona ...

RewriteRule ^somePage.php?toolid=([0-9]+)$ /tool/$1 [R=301,L]

O que há de errado aqui?

    
por DrDamnit 11.01.2017 / 19:13

1 resposta

2

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.

    
por 11.01.2017 / 19:40