.htaccess 301 redirecionar para URL ignorando seus parâmetros

1

Redirecionamentos de arquivos para Redirect 301 /products.php http://domain1.com/product_123.php

e redirecionamentos de domínio para Redirect 301 / http://www.domain2.com/

são fáceis. No entanto, quero redirecionar um URL ignorando todos os parâmetros, por exemplo domain1.com/slug1/slug2/slug3?pagination=1
domain1.com/slug1/slug2/slug3?ref=2
domain1.com/slug1/slug2/slug3?day=Monday
domain1.com/slug1/slug2/slug3?referer=Google
domain1.com/slug1/slug2/slug3?referer=Facebook
etc
todos devem redirecionar para domain1.com/slug4

    
por OC2PS 01.08.2016 / 10:42

2 respostas

4

É aí que você deve usar uma diretiva RedirectMatch com correspondência regex em vez de a planície Redirect .

Talvez algo nos moldes de:

 RedirectMatch 301 "/slug1/slug2/slug3(.*)$" "/slug4"
    
por 01.08.2016 / 11:02
2

Se você quiser ignorar "all parameters", então você ainda pode usar um padrão Redirect , porque é o prefix matching (e não corresponde à string de consulta). Por exemplo:

Redirect 301 /slug1/slug2/slug3 /slug4

O Redirect acima redirecionaria 301 todos os URLs da pergunta (ou seja, todos os URLs que iniciam /slug1/slug2/slug3 ) para /slug4 .

No entanto, qualquer string de consulta no URL solicitado também será passada para o destino inalterado. Portanto, /slug1/slug2/slug3?ref=2 será redirecionado para /slug4?ref=2 . Se isso não for desejado, você precisará usar mod_rewrite (ou seja, RewriteRule ), em vez de mod_alias (ou seja, Redirect ) para remover explicitamente a string de consulta completamente do URL de destino. Por exemplo:

RewriteEngine On
RewriteRule ^slug1/slug2/slug3$ /slug4? [R=301,L]

O ? no final da substituição de RewriteRule resultará na remoção da seqüência de consulta da URL de destino (você pode, alternativamente, usar o sinalizador QSD no Apache 2.4+). A string de consulta não é correspondida pelo padrão RewriteRule , então não há nada extra que você precise fazer, a menos que você precise corresponder cadeias de consulta específicas ou somente quando houver uma string de consulta acima corresponderá independentemente de uma string de consulta estar presente ou não).

Uma ressalva adicional ao mudar para um redirecionamento mod_rewrite é que você deve idealmente alterar qualquer redirecionamento mod_alias existente para a sintaxe mod_rewrite. Isso evita conflitos potenciais, já que os dois módulos são executados em momentos diferentes.

    
por 01.08.2016 / 11:35