Redirecionar todos os subdomínios, subpáginas e o domínio raiz para si mesmos em outro domínio

0

Eu fiz muita pesquisa e tentei muitas coisas, mas ainda não consegui encontrar uma maneira de fazer isso exatamente como eu quero.

Sem ter que fazer um Apache VirtualHost para cada subdomínio, e com o apache2 (preferencialmente), htaccess ou DNS, eu gostaria de redirecionar:

  • domain.xyz to domain.com
  • domain.xyz/* to domain.com/*
  • *.domain.xyz a *.domain.xyz (então a.domain.xyz vai para a.domain.com e b.domain.xyz vai para b.domain.com )
  • *domain.xyz/* to *.domain.com/*

Qual é a maneira mais fácil de fazer isso?

    
por Spydar007 09.09.2015 / 18:30

1 resposta

0

Abordagem 1

Aviso de isenção : eu não tentei essa primeira abordagem, mas acho que pode funcionar.

<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(.*)\.xyz$
    RewriteRule ^/(.*)$ http://%1.com/$1 [R=301,L]
</VirtualHost>

Assim, o primeiro RewriteCond deve corresponder ao HTTP_HOST , que basicamente será o seu domínio se terminar em .xyz . Em caso afirmativo, basta reescrever a solicitação para o .com TLD com o mesmo URI.

Abordagem 2

Existe também outro jeito. Você poderia simplesmente encaminhar qualquer solicitação para um arquivo PHP estático e colocar o URL original como um parâmetro para o script e, uma vez chamado, substitua o URL pelo domínio desejado. Isso implicaria as seguintes alterações:

  1. Edite a configuração do seu apache e coloque algo assim dentro. Isso foi copiado de aqui .

    RewriteEngine on
    
    RewriteCond %{REQUEST_FILENAME} !index.php
    RewriteRule .* index.php?url=$0 [QSA,L]
    

    Dessa forma, qualquer solicitação será encaminhada para um arquivo index.php localizado onde quer que você tenha definido na sua diretiva DocumentRoot .

  2. Nesse arquivo, você faria algo assim:

    <?php
       $url =  "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
       $escaped_url = htmlspecialchars($url, ENT_QUOTES, 'UTF-8');
    
       preg_match("/^http:\/\/(.*)\.xyz(.*)$/", $escaped_url, $matches);
       header("Location: http://{$matches[1]}.com{$matches[2]}");
    ?>
    

    Então, você está combinando o URL original (armazenado em $url ) com um regexp e alterando o local do usuário (via a função header() ) para o mesmo domínio, mas com TLD diferente. Esta última tentativa foi testada e funciona bem.

por 09.09.2015 / 18:37