Redirecionar o domínio inteiro para uma única página em outro domínio no Apache Virtual Host

Redirecionar o domínio inteiro para uma única página em outro domínio no Apache Virtual Host

Há muitas informações sobre como redirecionar um domínio inteiro para outro domínio, mas não consigo encontrar nenhuma pergunta respondida sobre como redirecionar um domínio para uma página específica em um segundo domínio. Isto é o que eu configurei:

<VirtualHost *:80>
    ServerName www.domain2.org.uk
    ServerAlias domain2.org.uk domain1.co.uk www.domain1.co.uk
    DocumentRoot /var/www/html
    ErrorLog logs/mkt-error_log
    CustomLog logs/mkt-access_log common
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !domain1.co.uk$ [NC]
    RewriteRule ^(.*)$ https://www.domain2.org.uk/specific-page/ [L,R=301]
</VirtualHost>

Isso redireciona, mas apenas para a página padrão do domínio2. Como posso alterar isso para que vá para a página específica?

Responder1

RewriteRule ^(.*)$ https://www.domain2.org.uk/specific-page/ [L,R=301]

Isso já faz o que você precisa e redirecionatudopara https://www.domain2.org.uk/specific-page/- como indicado noRewriteRule substituição. (Apesar deRewriteRule padrãoestá capturando desnecessariamente uma referência anterior.)

RewriteCond %{HTTP_HOST} !domain1.co.uk$ [NC]

NO ENTANTO (a menos que seja um erro de digitação no trecho de código exemplificado), a condição (que verifica se o Hostcabeçalhonãoterminar com domain1.co.uk) resultará em um loop de redirecionamento ( domain2.org.uké obviamentenão domain1.co.uk, então a condição é sempre satisfeita). E os seguintes RewriteRuleredirecionamentostudo.

OCondPadrãonesta RewriteConddirectiva precisa ser alterada, por:

  • Removendo o !prefixo (negação). (Embora o final $ainda cause problemas com um FQDN que termina em ponto.)
  • OU, mude para!domain2\.org\.uk$

Mas... já que você claramente tem acesso à configuração do servidor e está trabalhando em umhost virtualcontexto, você realmente não deveria usar mod_rewrite para isso. Você deve criar um vhost separado, um para domain1, outro para domain2e usar uma diretiva mod_alias RedirectMatch... menos sujeito a erros, mais eficiente.

Por exemplo:

<VirtualHost *:80>
    ServerName domain1.org.uk
    ServerAlias www.domain1.org.uk
    RedirectMatch 301 ^ https://www.domain2.org.uk/specific-page/
</VirtualHost>

<VirtualHost *:80>
    ServerName domain2.org.uk
    ServerAlias www.domain2.org.uk
    DocumentRoot /var/www/html
    ErrorLog logs/mkt-error_log
    CustomLog logs/mkt-access_log common
</VirtualHost>

NB: Esses vhosts são apenas para HTTP (porta 80), então você naturalmente precisará repetir esse redirecionamento para HTTPS (porta 443).

informação relacionada