.htaccess redireciona todas as páginas para o novo domínio

Qual regra de redirecionamento eu usaria para redirect todas as páginas em olddomain.com para serem redirecionadas para newdomain.com ?

O site tem uma estrutura totalmente diferente, portanto, quero que todas as páginas do antigo domínio sejam redirecionadas para a nova página de índice de domínios.

Eu pensei que isso funcionaria (sob o diretório base olddomain.com):

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

Mas se eu navegar para olddomain.com/somepage serei redirecionado para newdomain.com/somepage . Estou esperando um redirecionamento apenas para newdomain.com sem o sufixo da página.

Como faço para manter a última parte?

Pode ser assim:

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

Aqui, este redireciona tudo após o nome de domínio na URL para a mesma cópia exata no novo URL do domínio:

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

www.example.net/somepage.html?var=foo redireciona para www.newdomain.com/somepage.html?var=foo

Só para esclarecer, depois de remover o redirecionamento de hospedagem que estava no caminho, minha solução original também funciona:

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

Eu usei para o meu blog WordPress isso como .htaccess. Converte http://www.blah.nl/asad , http://blah.nl/asad , http://www.blah.com/asad etc, para http://blah.com/asad Obrigado a todos outras respostas eu percebi isso.

  RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !.*YOURDOMAIN\.com$ [NC] RewriteRule ^(.*)$ http://YOURDOMAIN.com/$1 [R=301,L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  

Se você quiser redirect de algum local para o subdomínio, poderá usar:

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

Existem várias maneiras de fazer isso e vários redirecionamentos, eu os listei abaixo:

Redirecionamento 301 (permanente): aponte um site inteiro para um URL diferente em uma base permanente. Esse é o tipo mais comum de redirecionamento e é útil na maioria das situações. Neste exemplo, estamos redirecionando para o domínio “example.com”:

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

Redirecionamento 302 (temporário): aponte um site inteiro para um URL temporário diferente. Isso é útil para fins de SEO quando você tem uma página de destino temporária e planeja voltar para sua página de destino principal em uma data posterior:

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

Redirecione index.html para uma subpasta específica:

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

Redirecionar um arquivo antigo para um novo caminho de arquivo:

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

Redirecionar para uma página de índice específica:

 # Provide Specific Index Page (Set the default handler) DirectoryIndex index.html 
  RewriteEngine On RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR] RewriteCond %{HTTP_HOST} ^www.olddomain.com$ RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L]  

Isso funcionou para mim

Se o novo domínio para o qual você está redirecionando seu site antigo estiver em um host diferente, você pode simplesmente usar um Redirect

 Redirect 301 / http://newdomain.com 

Isso redirectá todas as solicitações do olddomain para o newdomain .

Redirect diretiva de Redirect não funcionará ou poderá causar um Redirect loop se o seu novo domínio e o antigo domínio estiverem no mesmo host; nesse caso, será necessário usar o mod-rewrite para redirect com base no header do host solicitado.

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

Minha reputação não me permite comentar uma resposta, mas eu só queria ressaltar que a resposta mais bem classificada aqui tem um erro:

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

deve ter uma barra antes dos $ 1, então

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

Minha solução como SymLinks não funcionou no meu servidor, então usei um If no meu 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(); } 

Este é um bug em versões mais antigas do apache (e, portanto, mod_rewrite), onde o prefixo do caminho foi anexado ao caminho reescrito se ele foi alterado. Veja aqui

Eu acho que foi corrigido no apache2 V2.2.12, há um sinalizador especial que você precisa usar que eu vou adicionar aqui quando eu encontrá-lo, (eu acho que foi NP para No Path)

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

Do ponto de vista da usabilidade, seria melhor se você também enviasse o caminho com o pedido (ou seja, o que você tem no momento) e deixasse seu novo site lidar com ele:

Você pesquisou “/ produtos”.

Infelizmente esta página está desaparecida. Gostaria de visitar “/ new_products”?

(e melhor ainda, fazendo isso automaticamente.)

Isso é obviamente muito código e heurística para um website maior, mas na minha opinião isso compensaria em termos de satisfação do usuário (quando o seu bookmark cuidadosamente guardado do seu produto de sonho apenas leva você à primeira página do newdomain.com, este é frustrante.)

Se você quiser redirect para concluir novo site diferente (domínio) sem parâmetros ou páginas, use isto:

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

Eu tentei a resposta do user968421 e a solução do OP, mas o navegador apareceu um erro de segurança para uma página de checkout. Eu não posso te dizer por que exatamente.

Nosso anfitrião (Site Ground) também não conseguiu descobrir.

A solução final estava próxima, mas um ligeiro ajuste na resposta do user968421 (nota: ao contrário do OP, eu estava tentando redirect para a página correspondente, não apenas para a página inicial, então mantive a referência de volta [o $1 após o domínio] de resposta de user968421):

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

Obteve o tweak deste gerador de redirecionamento de htaccess recomendado por um artigo do Host Gator (tempos desesperados, medidas desesperadas, direito de propriedade?).

Use redirecionamentos condicionais com Options -FollowSymLinks e AllowOverride -Options desabilitadas pelo AllowOverride -Options se alguns arquivos locais também forem exibidos:

Amostra de .htaccess

 # Redirect everything except index.html to http://foo  Redirect 301 / http://foo/  

Este exemplo servirá index.html local e redirectá todos os outros funcionários para o novo domínio.