Opciones para un redirect

Hace unos días compré el dominio brolio.dev y decidí usarlo como dominio principal, por lo que un redirect desde embrolio.com era necesario y se me ocurrió hacer un mini post con varias opciones disponibles para hacerlo, dependiendo del nivel de acceso que tengamos al server que hostea el sitio.

En la configuración del servidor web

Para mi, la mejor opción es hacer el redirect a nivel config del server, si tenemos posibilidad de modificarla lo que hay que hacer es lo siguiente (Como mencioné, el redirect es desde embrolio.com a brolio.dev):

nginx config

server {
    #Resto de la config (si hace falta, certificados SSL por ejemplo)

    server_name embrolio.com www.embrolio.com;
    return      301 https://brolio.dev$request_uri;
}

apache config

<VirtualHost *:80>
    ServerName  embrolio.com
    ServerAlias www.embrolio.com
    Redirect permanent / https://brolio.dev/
</VirtualHost>

apache .htaccess

Si no tenemos acceso a la config del server, pero sabemos que es un apache con mod_rewrite habilitado podemos agregar el redirect en el .htaccess del sitio.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^embrolio.com\.com$ [NC]
RewriteRule ^(.*)$ https://brolio.dev/ [R=301,L]

En el código

Por último, si ninguna de las opciones anteriores son viables, nos queda hacer el redirect en el código (repito, no es lo más conveniente y siempre tratar de usar los métodos de arriba primero).

JS

if (location.host !== 'brolio.dev') {
    var url = new URL(window.location);
    url.host = 'brolio.dev';
    window.location.replace(url);
}

Lo que hace este código es tomar la location, modificar el host a brolio.dev (asi mantenemos el path, si por ejemplo alguien accede a una sección del sitio lo redireccionamos correctamente en lugar de al home) y hacer un replace por la nueva URL (el replace lo que hace es, justamente, reemplazar la location para que si el usuario presiona el botón atrás en el navegador no vuelve a la página desde la cual lo redireccionamos). Finalmente todo el código se ejecuta unicamente si el host actual no es brolio.dev, para evitar loops de redireccionamiento.