Я совсем не разбираюсь в C-NAMES
, A-RECORDS
, DNS-серверы и тому подобное, так что просто потерпите меня в этом:
Я хочу перенаправить subdomain.example.org на другой домен somethingelse.com. Я владею обоими доменами, и оба домена работают на общем хостинге. При создании поддомена все, что я могу сделать из коробки, - это выполнить перенаправление HTTP (302, фу!) Или перенаправление кадра.
Я также могу установить записи DNS на одном хосте, например, на сервере имен, CNAME
- но я бы знал, что делаю.
Пожалуйста, объясните мне, как работает маршрутизация с серверами имен и как я должен (даже если это невозможно с моим текущим хостом) перенаправить subdomain.example.org на somethingelse.com с видимым для пользователя URL-адресом, оставшимся на "subdomain.example.org"
Серверы имен ничего не маршрутизируют. Серверы имен отвечают на запросы имен и в конечном итоге возвращают IP. Записи CNAME возвращают имя, которое затем просматривается для получения IP. Единственное, что вы действительно можете сделать со своими записями DNS, - это убедиться, что ваше имя задано и возвращает IP-адрес сервера, который будет принимать трафик и делать то, что вы хотите.
Если вы настроили веб-сервер с настройкой виртуального хостинга на основе имени, а основным именем этого виртуального хоста будет somethingelse.com
тогда вы можете установить дополнительное имя для этого виртуального хоста subdomain.example.org
. В DNS вы устанавливаете записи для возврата IP-адреса виртуального хоста, обслуживающего somethingelse.com
.
Веб-сайт размещен на somethingelse.com
должны использовать относительные ссылки везде, где это возможно, иначе пользователь быстро поймет, что теперь они были переключены на другой домен.
... это ключевой момент. Как мне это сделать?
Просто создайте запись A, которая связывает имя с IP-адресом, или запись CNAME, которая указывает на запись A, которая указывает на нужный IP-адрес.
DNS ничего не знает. То, что вы просите, должно обрабатываться на HTTP-сервере.
В противном случае я мог бы указать свой домен на google.com и сделать так, чтобы он выглядел как мой сайт?
Вы можете указать DNS-запись на любой понравившийся IP-адрес. В случае HTTP часть запроса включает имя хоста, к которому вы пытаетесь получить доступ. Веб-серверы Google могут отклонить запрос на основе имени хоста, являющегося частью HTTP-запроса.
Настройка DNS-имени для подключения к серверам Google поддерживается даже в том случае, если вы являетесь клиентом Google Apps. Существует процедура, которой вы чаще всего следуете, чтобы сообщить Google, какое имя вы будете использовать для определенной страницы. Затем Google соответствующим образом корректирует их конфигурацию.
Если вы используете какой-либо другой протокол, который не включает имя хоста, используемое для доступа, тогда сервер не сможет узнать, что к чему. Вы можете легко проверить это на себе, создав запись вроде googledns.example.org IN A 8.8.8.8
, а затем бег ping googledns.example.org
, DNS-сервер Google ответит на пинг. Имя, которое вы использовали для команды ping, вообще не включается в эхо-ответ ICMP, только IP-адрес.
Почему вы не можете просто настроить файл .htaccess (с перенаправлением 301) в папке, в которой находится subdmain.
Например:
Отредактируйте этот новый файл .htaccess и добавьте следующий код
Перенаправление 301 / http://somethingelse.com
Когда / является корневым каталогом вашего поддомена, и http://somethingelse.com быть там, где вы хотите, чтобы его отправили.
Работает для меня.
Перенаправления DNS с использованием CNAMES не будут работать так, как вы хотите, на общем хосте.
Для наших целей предположим, что у вас есть запись CNAME для subdomain.example.org, которая указывает на somethingelse.com, и запись A для somethingelse.com. Когда вы посещаете subdomain.example.com, сначала запрашивается DNS-сервер для определения правильного IP-адреса. DNS-сервер увидит запись CNAME и рекурсивно определит IP-адрес somethingelse.com, который затем будет возвращен на ваш рабочий стол.
Затем ваш браузер свяжется с этим IP-адресом и запросит subdomain.example.com. Фактически, он даже не знает о существовании somethingelse.com.
Если бы у вас был выделенный ящик, вы могли бы заставить CNAME работать так, как вы думаете, что они должны, но вы бы лишились возможности использовать виртуальный хост на основе имени. При использовании виртуальных хостов на основе IP любой домен, указывающий на данный IP-адрес, будет обслуживать один и тот же контент.
Чтобы в адресной строке браузера отображалось subdomain.example.org, пока страница обслуживается с somethingelse.com, вы можете пересмотреть вариант использования перенаправления фрейма, предоставляемого вашим хостом.
Другая возможность, если ваш хост предоставляет mod_proxy, - это настроить обратный прокси в конфигурации виртуального хоста subdomain.example.com:
ProxyPass / http://somethingelse.com/
ProxyPassReverse / somethingelse.com/
Это приведет к тому, что subdomain.example.com предоставит контент somethingelse.com, при этом subdomain.example.com будет сообщаться как исходный домен.
Единственное полное решение - настроить веб-сервер для прослушивания «subdomain.example.org» и перенаправления его на «somethingelse.com» с перенаправлением HTTP.
Если вы используете cname для указания 'subdomain.example.org' на 'somethingelse.com', веб-браузер будет разговаривать с веб-сервером для 'somethingelse.com', но он скажет: «Я ищу subdomain.example. org ", для которого он не может быть настроен. Если вы можете настроить веб-сервер для приема обоих URL-адресов, то cname будет работать нормально.