.htaccess redirige todas las páginas al nuevo dominio


218

¿Qué regla de redireccionamiento usaría para redirigir todas las páginas olddomain.examplea las que se redirigirá newdomain.example?

El sitio tiene una estructura totalmente diferente, por lo que quiero que cada página del dominio anterior se redirija a la nueva página de índice de dominio .

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

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

Pero si navego hacia, olddomain.example/somepageme redirigen a newdomain.example/somepage. Espero una redirección solo newdomain.examplesin el sufijo de la página.

¿Cómo mantengo la última parte?


8
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
Kai Noack

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

Respuestas:


201

Puede ser así:

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

Um, ¿podrías intentar recargar tu navegador? incluso está redirigiendo con xampp aquí. Acabo de probar.
USTED

Lo malo ... funciona, mi servicio de alojamiento tenía alguna otra redirección en la que estaba jodidamente. ¡Gracias! :)
Yuval Adam

25
¿No sería así RewriteCond %{HTTP_HOST} !^NEWDOMAIN\.com$ [NC]?
Jim Geurts

1
Después de un largo invierno, edité el código para que finalmente pueda funcionar. (lo correcto es redirigir si ES IGUAL y NO DIFERENTE al antiguo dominio, ese fue el problema)
carla

55
@JimGeurts Solo si desea redirigir TODO lo que no sea newdomain. Sin embargo, en este caso, queríamos redirigir SOLAMENTE olddomain.
carla

442

La respuesta a continuación podría causar un bucle 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


21
Sin embargo, ¿esto no redirigirá CADA solicitud, incluso las de newdomain.com? ¿Y esencialmente causa dos solicitudes duplicadas en esos casos?
Bill Dami

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

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

¿Cómo podemos hacer para redirigir del subdominio al nuevo dominio?
Sukhjinder Singh

2
¿Podría alguien responder la pregunta de Bill por favor? ¿No debería esto usar un RewriteCond para evitar una solicitud duplicada y / o reescrituras innecesarias? Supongo que no tendría ningún impacto notable reescribir cada vez que no sea necesario. Pero por qué hacerlo.
Andrew

80

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]

Esto redirigirá al índice predeterminado, que es de lo que se trataba su pregunta. Solo por claridad, dado que, debido a la proximidad, su declaración parece estar dirigida hacia la respuesta del usuario 968421 justo encima de esto, la respuesta del usuario 968421 es correcta cuando la intención es redirigir al nombre de archivo correspondiente en el nuevo dominio.
RationalRabbit

19

Lo he usado para mi blog de Wordpress como .htaccess. Convierte http: //www.blah.example/asad , http: //blah.example/asad , http: //www.blah.example2/asad , etc., a http: //blah.example/asad Gracias a todos otras respuestas me di cuenta de 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>

2
Considero que esta es la respuesta más completa de todas: ¡conserva el ranking para cada página y es una atracción para todos los dominios que no son los principales! ¿Que podría ser mejor?
nzn

1
La clave aquí es que la regla de reescritura de dominio viene antes que la regla de reescritura de índice de WordPress.
MrMoxy

14
<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 funciono para mi


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
Darksymphony

13

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 más común de redireccionamiento y es útil en la mayoría de las situaciones. En este ejemplo, estamos redirigiendo al dominio "ejemplo.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 más adelante:

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

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

Redireccionar 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

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

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

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

@YassinMK No $1se requiere aquí, está pensando en la RedirectMatchdirectiva (pero aún así necesitaría definir un grupo de captura para la $1referencia).
MrWhite

Aunque todas estas Redirectdirectivas redirigirán de igual a igual, mientras que el OP desea redirigir solo a la página de inicio del nuevo sitio (aunque eso en sí mismo no es recomendable). Es posible que deba usar la RedirectMatchdirectiva si solo desea redirigir a una URL específica.
MrWhite

en lugar de 301 también podría escribir Redirect permanente / h ttps: //www.example.com, puede hacerlo en el archivo vhost
Yvon Huynh

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

9

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

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


Es la mejor manera. Porque muchos Webhosters no permitieron el uso de RewriteEngine en .htaccess. ¡Esto funciona muy bien de todos modos!
Sprinterfreak

Debe usar RewriteEngine para redirigir. La razón por la que tuvo problemas es que RewriteEngine ya estaba activo y solo necesitaba una regla de redireccionamiento. Me alegro de que eso haya ayudado.
EmptySD

No es verdad. Se salta todo lo de reescritura y cuando se usa RewriteEngine Onthrows 500 Internal Error. Es un espacio web muy restringido. Usar Redirect 301 / http://fooes la única forma posible de tratar.
Sprinterfreak

6

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 olddomaina newdomain.

Redirectla directiva no funcionará o puede causar un problema Redirect loopsi su nuevo dominio y su antiguo dominio están en el mismo host, en ese caso deberá usar mod-rewritepara 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] 

5

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]

debería tener una barra inclinada antes de $ 1, así que

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

3

Mi solución como SymLinks no funcionaba 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();
}

2

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 cambió. Mira aquí

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

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

Me golpeé la cabeza contra esto durante casi un mes
signo de interrogación el

2

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

Has buscado "/ productos".

Lamentablemente esta página se ha ido. ¿Desea 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 sería rentable en términos de satisfacción del usuario (cuando su marcador guardado cuidadosamente del producto de sus sueños solo lo lleva a la página principal de newdomain.com, esto es frustrante)


Para dicho sitio web esto es prácticamente irrelevante ya que todo el sitio web ha cambiado, pero tiene toda la razón. El sitio web debe ser lo más compatible posible con versiones anteriores. +1
Yuval Adam

2

Si desea redirigir para completar un nuevo sitio (dominio) diferente sin parámetros o páginas, use esto:

RewriteEngine On
RewriteRule / http://new-domain.com/$1? [R=301]

1
Esto no funcionará como se espera cuando se usa, .htaccessya que simplemente no coincidirá con ninguna URL en la raíz del documento. Funcionaría en una configuración de servidor o contexto VirtualHost.
MrWhite

2

Intenté la respuesta del usuario 968421 y la solución del OP, pero el navegador apareció 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 fue cercana, pero un ligero ajuste a la respuesta del usuario 968421 (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 $1mantuve la referencia posterior [ después del dominio] del usuario968421 responder):

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

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


2

Simple como este 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]

que realmente funcionó para mí, necesito una solución sin pasar cualquier babosa a un nuevo dominio Gracias Dsynmphony
Faisal Mehmood Awan

1

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

Muestra .htaccess

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

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


1

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

0

Las respuestas anteriores no me funcionaron.

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

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?OLDDOMAIN\.com$ [NC]
RewriteRule (.*) http://www.NEWDOMAIN.com/ [R=301,L]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.