Подход 1
Отказ от ответственности: я не пробовал этот первый подход, но я думаю, что он может сработать.
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*)\.xyz$
RewriteRule ^/(.*)$ http://%1.com/$1 [R=301,L]
</VirtualHost>
Итак, первый RewriteCond
должен соответствовать HTTP_HOST
который в основном будет вашим доменом, если он заканчивается на .xyz
. Если это так, вы просто переписываете запрос в домен .com
с тем же URI.
Подход 2
Есть и другой способ. Вы можете просто перенаправить любой запрос в статический PHP-файл и поместить исходный URL-адрес в качестве параметра в сценарий, а после вызова заменить URL-адрес на нужный домен. Это будет означать следующие изменения:
Отредактируйте конфигурацию вашего apache и поместите что-то подобное внутри. Это было скопировано отсюда.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !index.php
RewriteRule .* index.php?url=$0 [QSA,L]
Таким образом, любой запрос будет перенаправлен в файл index.php
расположенный там, где вы определили директиву DocumentRoot
.
В этом файле вы бы сделали что-то вроде этого:
<?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]}");
?>
Таким образом, вы просто сопоставляете исходный URL (хранящийся внутри $url
) с регулярным выражением и меняете местоположение пользовательской функции (через header()
) на тот же домен, но с другим TLD
. Эта последняя попытка была проверена и работает хорошо.