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:
-
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 diretivaDocumentRoot
. -
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çãoheader()
) para o mesmo domínio, mas comTLD
diferente. Esta última tentativa foi testada e funciona bem.