Redirigir todo el dominio a una sola página en otro dominio en Apache Virtual Host

Redirigir todo el dominio a una sola página en otro dominio en Apache Virtual Host

Hay mucha información sobre cómo redirigir un dominio completo a otro dominio, pero no puedo encontrar ninguna pregunta respondida sobre cómo redirigir un dominio a una página específica en un segundo dominio. Esto es lo que he configurado:

<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>

Esto redirige pero solo a la página predeterminada para el dominio2. ¿Cómo puedo cambiar esto para que vaya a la página específica?

Respuesta1

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

Esto ya hace lo que necesitas y redirige.todoa https://www.domain2.org.uk/specific-page/- como se indica en elRewriteRule sustitución. (Aunque elRewriteRule patrónestá capturando innecesariamente una referencia retrospectiva).

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

SIN EMBARGO (a menos que se trate de un error tipográfico en el fragmento de código ejemplificado), la condición (que verifica que el Hostencabezado nonoterminar con domain1.co.uk) dará como resultado un bucle de redireccionamiento ( domain2.org.ukobviamente esno domain1.co.uk, por lo que la condición siempre se cumple). Y las siguientes RewriteRuleredireccionestodo.

ElPatrónConden esta RewriteConddirectiva debe modificarse mediante:

  • Eliminando el !prefijo (negación). (Aunque el final $todavía causaría problemas con un FQDN que termina en un punto).
  • O cambiar a!domain2\.org\.uk$

Pero... dado que claramente tienes acceso a la configuración del servidor y estás trabajando en unanfitrión virtualcontexto, realmente no deberías usar mod_rewrite para esto. Debería crear un vhost separado, uno para domain1, el otro para domain2y usar una directiva mod_alias RedirectMatchen su lugar... menos propenso a errores, más eficiente.

Por ejemplo:

<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: Estos vhosts son solo para HTTP (puerto 80), por lo que, naturalmente, necesitarás repetir esta redirección para HTTPS (puerto 443).

información relacionada