Como você redireciona URLs com uma string de consulta para outro host?

3

Esse snippet de htaccess deve redirecionar

myhost.com/?p=1&preview=true

para

alt.myhost.com/?p=1&preview=true

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^myhost.com$ [NC]
RewriteRule ^/\?p=([0-9]+)&preview=true$ http://alt.myhost.com/?p=$1&preview=true [NC,R=301,L]

mas por alguma razão eu não posso escapar do / e? parte do URL. Não tenho certeza porque isso não está funcionando ...

Eu tentei escapar?

\? \? [?]

e eu tentei escapar do /

\/ \/ [/]

nada disso parece funcionar ...

ajuda!

    
por qodeninja 13.06.2011 / 19:41

2 respostas

7

Isso redirecionará TODAS as solicitações de myhost.com para alt.myhost.com

RewriteCond %{HTTP_HOST} !^alt\.myhost\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/?(.*) http://alt.myhost.com/$1 [L,R,NE]

Código retirado do manual mod_rewrite oficial

Se por alguma razão a string de consulta não for preservada, substitua a última linha por

RewriteRule ^/?(.*) http://alt.myhost.com/$1 [L,R,NE,QSA]

UPDATE: Isso redirecionará seu URL específico para outro domínio:

RewriteCond %{HTTP_HOST} =myhost.com [NC]
RewriteCond %{QUERY_STRING} ^(p=1&preview=true)
RewriteRule ^$ http://alt.myhost.com/?%1 [R=301,L]
    
por 13.06.2011 / 23:18
5

Por causa da string de consulta "p = ([0-9] +) & preview = true" Eu acho que sua necessidade de um redirecionamento é devido a ter o wordpress admin em um subdomínio e o site no seu domínio principal.

Por causa disso, você não pode visualizar rascunhos.

Eu criei uma solução mais ampla que também funciona com tipos de postagem personalizados e plug-ins que adicionam parâmetros:

RewriteCond %{HTTP_HOST} =myhost.com [NC]
RewriteCond %{QUERY_STRING} (preview=true)
RewriteRule ^$ http://alt.myhost.com/?%{QUERY_STRING} [R=301,L]

Em inglês simples quando "preview = true" é encontrado em uma consulta, o redirecionamento acontece no subdomínio alt e a consulta completa é mantida.

    
por 28.11.2011 / 14:44