.htaccess redirige todas las páginas a un nuevo dominio

¿Qué regla de redireccionamiento usaría para redirigir todas las páginas bajo olddomain.example para ser redirigido a newdomain.example?

El sitio tiene una estructura totalmente diferente, así que quiero cada página bajo el dominio antiguo para ser redirigido al nuevo dominio Página de inicio.

Pensé que esto serviría (en el directorio base de olddomain.example):

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.example/ [R=301]

Pero si navego hacia olddomain.example/somepage Me redirigen a newdomain.example/somepage. Espero un redireccionamiento solo a newdomain.example sin el sufijo de página.

¿Cómo evito la última parte?

preguntado el 22 de diciembre de 09 a las 07:12

Para ahorrar tiempo, desplácese hacia abajo hasta la mejor respuesta correcta, que es RewriteEngine on RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L] * stackoverflow.com/a/7578810/1066234 -

Vale la pena señalar que, particularmente desde una perspectiva de SEO, tener un redireccionamiento de muchos a uno al índice / página de inicio es generalmente una mala idea. Es probable que Google lo vea como un soft-404. -

18 Respuestas

Puede ser así:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^OLDDOMAIN\.com$ [NC]
RewriteRule ^(.*)$ http://NEWDOMAIN.com [R=301,L]

Respondido el 21 de enero de 17 a las 00:01

Um, ¿podrías intentar recargar tu navegador? incluso está redirigiendo con xampp aquí. Solo lo probé. -

Mi mal ... funciona, mi servicio de alojamiento tenía alguna otra redirección en la que estaba jodido. ¡Gracias! :) - adán yuval

No seria RewriteCond %{HTTP_HOST} !^NEWDOMAIN\.com$ [NC]? - jim geurts

Después de un largo invierno, edité el código para que finalmente funcione. (lo correcto es redirigir si es IGUAL y no DIFERENTE al dominio antiguo, ese era el problema) - carla

@JimGeurts Solo si desea redirigir TODO lo que no es newdomain. Sin embargo, en este caso, queríamos redirigir SOLO olddomain. - carla

La siguiente respuesta podría causar un ciclo de redireccionamiento infinito ...

Aquí, este redirige todo después del nombre de dominio en la URL a la misma copia exacta en la nueva URL de dominio:

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]
www.example.net/somepage.html?var=foo

redirige a:

www.newdomain.com/somepage.html?var=foo

Respondido 05 Oct 20, 15:10

¿No redirigirá esto TODAS las solicitudes, incluso las de newdomain.com? ¿Y esencialmente causar dos solicitudes duplicadas en esos casos? - bill dami

La pregunta es redirigir todo a la página de inicio. kravits88

Aunque esta no es la respuesta a la pregunta, llegué a esta pregunta de SE buscando exactamente esta respuesta. Gracias !!! - DAV

¿Cómo podemos hacer para redirigir desde un subdominio a un nuevo dominio? - Sukhjinder Singh

¿Podría alguien responder a la pregunta de Bill, por favor? ¿No debería utilizar un RewriteCond para evitar una solicitud duplicada y / o reescrituras innecesarias? Supongo que no tendría ningún impacto notable volver a escribir cada vez, aunque no sea necesario. Pero, ¿por qué hacerlo? - Andrés

Solo para aclarar, después de eliminar la redirección de alojamiento que estaba en el camino, mi solución original también funciona:

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.com/ [R=301]

Respondido el 22 de diciembre de 09 a las 11:12

Esto lo redireccionará al índice predeterminado, que es de lo que trataba su pregunta. Solo para mayor claridad, dado que, debido a la proximidad, su declaración parece estar dirigida hacia la respuesta de user968421 justo arriba de esto, la respuesta de user968421 es correcta cuando la intención es redirigir a un nombre de archivo correspondiente en el nuevo dominio. - Conejo Racional

Lo he usado para mi blog de Wordpress como .htaccess. Se convierte http://www.blah.example/asad, http://blah.example/asad, http://www.blah.example2/asad etc, para http://blah.example/asad Gracias a todas las demás respuestas, descubrí esto.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^YOURDOMAIN\.example$ [NC]
RewriteRule ^(.*)$ https://YOURDOMAIN.example/$1 [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Respondido 10 Feb 21, 11:02

Considero que esta es la respuesta más completa de todas: ¡conserva el ranking de cada página y es un punto de encuentro para todos los dominios que no son el principal! ¿Que podría ser mejor? - nzn

La clave aquí es que la regla de reescritura del dominio viene antes la regla de reescritura del índice de WordPress. - mrmoxy

@MrWhite Thx, he corregido mi respuesta. - danés

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR]
  RewriteCond %{HTTP_HOST} ^www.olddomain.com$
  RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L]
</IfModule>

Esto funcionó para mí

Respondido 27 Oct 16, 07:10

Sí, este método sería limpio y agradable, también funcionó para mí. - Cody

esto redirigirá con el parámetro en URl si hay alguno - index.php? aa = 9 llevará el parámetro a un nuevo dominio - Sinfonía oscura

Hay varias formas de hacer esto y varias redirecciones, las he enumerado a continuación:

Redirección 301 (permanente): apunte un sitio completo a una URL diferente de forma permanente. Este es el tipo de redireccionamiento más común y es útil en la mayoría de situaciones. En este ejemplo, estamos redirigiendo al dominio "example.com":

# This allows you to redirect your entire website to any other domain
Redirect 301 / http://example.com/

Redirección 302 (temporal): apunte un sitio completo a una URL temporal diferente. Esto es útil para fines de SEO cuando tiene una página de destino temporal y planea volver a su página de destino principal en una fecha posterior:

# This allows you to redirect your entire website to any other domain
Redirect 302 / http://example.com/

Redirigir index.html a una subcarpeta específica:

# This allows you to redirect index.html to a specific subfolder
Redirect /index.html http://example.com/newdirectory/

Redirigir un archivo antiguo a una nueva ruta de archivo:

# Redirect old file path to new file path
Redirect /olddirectory/oldfile.html http://example.com/newdirectory/newfile.html

Redirigir a una página de índice específica:

# Provide Specific Index Page (Set the default handler)
DirectoryIndex index.html

contestado el 13 de mayo de 15 a las 06:05

Si agrega $ 1 al primer ejemplo, así Redirect 301 / http://example.com/$1 entonces todas las páginas del sitio original serán redirigidas a la nueva raíz del sitio - Yassine Mokni

@YassinMK El $1 no es necesario aquí, estás pensando en el RedirectMatch directiva (pero entonces todavía necesitaría definir un grupo de captura para el $1 referirse). - MrWhite

Aunque todos estos Redirect las directivas redirigirán like for like, mientras que el OP quiere redirigir solo a la página de inicio del nuevo sitio (aunque eso en sí mismo no es recomendable). Puede que necesite utilizar el RedirectMatch directiva si solo desea redirigir a una URL específica. - MrWhite

en lugar de 301, también puede escribir Redirect permanente / h ttps: //www.example.com, puede hacer esto en el archivo vhost - Yvon Huynh

Pero la pregunta relacionada con .htaccess, ¿por qué mencionar el archivo vhost? - RustyIngles

Si desea redirigir desde alguna ubicación al subdominio, puede usar:

Redirect 301 /Old-Location/ http://subdomain.yourdomain.com

Respondido el 12 de diciembre de 13 a las 10:12

Es la mejor forma. Porque muchos Webhosters no permitían el uso de RewriteEngine en .htaccess. ¡Esto funciona muy bien de todos modos! - Sprinterfreak

Debe utilizar RewriteEngine para redirigir. La razón por la que tuvo el problema es que RewriteEngine ya estaba activo y solo necesitaba la regla de redireccionamiento. Me alegro de que haya ayudado. - VacíoSD

No es verdad. Se salta todo lo de Reescribir y cuando se usa RewriteEngine On arroja 500 Error interno. Es un espacio web muy restringido. Utilizando Redirect 301 / http://foo es la única forma posible de afrontarlo. - Sprinterfreak

Esto dará como resultado una redirección con formato incorrecto, ya que le falta una barra diagonal en la URL de destino. Con el Redirect directiva que necesita para incluir u omitir la barra al final en ambas las URL de origen y destino. - MrWhite

Si el nuevo dominio al que está redirigiendo su sitio anterior está en un host diferente, simplemente puede usar un Redirect

Redirect 301 / http://newdomain.com

Esto redirigirá todas las solicitudes de olddomain En el correo electrónico “Su Cuenta de Usuario en su Nuevo Sistema XNUMXCX”. newdomain .

Redirect directiva no funcionará o puede causar una Redirect loop si su nuevo dominio y su dominio antiguo están en el mismo host, en ese caso deberá usar mod-rewrite para redirigir según el encabezado del host solicitado.

RewriteEngine on


RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$
RewriteRule ^ http://newdomain.com%{REQUEST_URI} [NE,L,R] 

Respondido 01 Jul 16, 12:07

Mi reputación no me permite comentar una respuesta, pero solo quería señalar que la respuesta mejor calificada aquí tiene un error:

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com$1 [R=301,L]

debe tener una barra antes del $ 1, por lo que

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

Respondido el 04 de enero de 18 a las 18:01

La "respuesta mejor valorada" fue en realidad corregido un mes después de que se publicara esta respuesta. - MrWhite

Mi solución como SymLinks no funcionó en mi servidor, así que usé un If en mi PHP.

function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}
$redirect = str_replace("www.", "", curPageURL());
$remove_http_root    = str_replace('http://', '', $redirect);
$split_url_array     = explode('/', $remove_http_root );


if($split_url_array[0] == "olddomain.com"){
    header("Location: http://www.newdomain.com/$split_url_array[1]");
    die();
}

Respondido 06 Oct 14, 11:10

Tan simple como esto y esto no llevará la consulta final de la URL al nuevo dominio.

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule .* https://www.newdomain.com/? [R=301,L]

contestado el 15 de mayo de 19 a las 17:05

que realmente funcionó para mí, necesito una solución sin pasar ningún slug a un nuevo dominio Gracias Dsynmphony - Faisal Mehmood Awan

Este es un error en versiones anteriores de apache (y por lo tanto mod_rewrite) donde el prefijo de ruta se agregó a la ruta reescrita si se cambiaba. Mira aquí

Creo que se solucionó en apache2 V2.2.12, hay una bandera especial que debe usar y que agregaré aquí cuando la encuentre (creo que fue NP para No Path)

RewriteRule ^(.*)$ http://newdomain.com/ [??]

Respondido el 22 de diciembre de 09 a las 11:12

Me golpeé la cabeza contra esto durante casi un mes. Signo de interrogación

La bandera a la que probablemente te refieres es DPI (Descartar información de ruta). Sin embargo, esto debería ser irrelevante en el contexto de la pregunta. Esto solo se aplicará si tiene otras reescrituras internas que contienen información de ruta. Sin embargo, esta bandera debe aplicarse a las reescrituras, no a la redirección final. - MrWhite

Desde el punto de vista de la usabilidad, sería mejor si también envía la ruta con la solicitud (es decir, lo que tiene en este momento) y deja que su nuevo sitio se ocupe de ello:

Ha buscado "/ productos".

Desafortunadamente, esta página ya no está. ¿Le gustaría visitar "/ new_products" en su lugar?

(y mejor aún, haciendo esto automáticamente).

Obviamente, esto es una gran cantidad de codificación y heurística para un sitio web más grande, pero en mi opinión valdría la pena en términos de satisfacción del usuario (cuando el marcador cuidadosamente guardado del producto de sus sueños solo lo lleva a la página principal de newdomain.com, esto es frustrante.)

Respondido el 22 de diciembre de 09 a las 11:12

Para dicho sitio web, esto es bastante irrelevante ya que todo el sitio web ha cambiado, pero está absolutamente en lo cierto. El sitio web debe ser lo más compatible con versiones anteriores posible. +1 - adán yuval

Probé la respuesta del usuario968421 y la solución del OP, pero el navegador mostró un error de seguridad para una página de pago. No puedo decirte por qué exactamente.

Nuestro anfitrión (Site Ground) tampoco pudo resolverlo.

La solución final estuvo cerca, pero un ligero ajuste a la respuesta del usuario968421 (nota al margen: a diferencia del OP, estaba tratando de redirigir a la página correspondiente, no solo a la página de inicio, así que mantuve la referencia anterior [la $1 después del dominio] de la respuesta del usuario968421):

RewriteEngine on
RewriteRule (.*) https://newdomain.com/$1 [R=301,L]

Conseguí el ajuste de esto generador de redireccionamiento de htaccess recomendado por un Artículo de Host Gator (tiempos desesperados, medidas desesperadas, ¿verdad?).

Respondido 07 Abr '16, 01:04

Utilice redireccionamientos condicionales con Options -FollowSymLinks y AllowOverride -Options inhabilitado por el Hoster si también se deben servir algunos archivos locales:

.Htaccess de muestra

# Redirect everything except index.html to http://foo
<FilesMatch "(?<!index\.html)$">
    Redirect 301 / http://foo/
</FilesMatch>

Este ejemplo servirá index.html local y redirigirá al resto del personal al nuevo dominio.

Respondido el 04 de junio de 15 a las 01:06

Pruebe este método para redirigir todo al nuevo dominio de la página de inicio, funciona para mí:

RewriteCond %{HTTP_HOST} ^olddomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$
RewriteRule ^(.*)$ "https\:\/\/newdomain\.com\/" [R=301,L]

Respondido el 01 de diciembre de 19 a las 10:12

Las respuestas anteriores no me funcionaron.

Usé este código. Si está utilizando OSX, asegúrese de utilizar el formato correcto.

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?OLDDOMAIN\.com$ [NC]
RewriteRule (.*) http://www.NEWDOMAIN.com/ [R=301,L]

respondido 05 nov., 18:13

La forma más sencilla es en realidad:

Redirect 301 / http://www.newsite.com/

fuente: https://github.com/phanan/htaccess#redirect-an-entire-site

respondido 02 mar '21, 02:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.