Создание поддоменов на лету

Когда кто-то регистрируется в Blogger или WordPress, он получает свой собственный поддомен, который работает мгновенно. Как мне добиться того же, имея свой VPS/VDS/выделенный сервер?


person Viet    schedule 03.02.2010    source источник
comment
Замечательный вопрос. Я никогда не знал, что это возможно.   -  person Basil Musa    schedule 01.04.2017


Ответы (2)


В двух словах:

  1. Создайте подстановочный домен в DNS (т. е. разрешение what.yourdomain.example возвращает ваш IP),
  2. создайте виртуальный хост по умолчанию на своем веб-сервере и
  3. проверьте URL-адрес в своем приложении.

Как это сделать, зависит от того, какую технологию вы используете. Приведу несколько примеров:

  1. Как настроить подстановочный домен в BIND и в DNS Windows Server.
  2. Чтобы создать виртуальный хост по умолчанию, вам просто нужно создать веб-сервер без записи хоста в IIS. В Apache первый виртуальный хост, указанный в файле конфигурации, становится хостом по умолчанию.
  3. Здесь вы можете либо (а) переписать URL-адрес в зависимости от домена (т. е. преобразовать поддомен в параметр в URL-адресе, пример для ASP. NET, примеры для Apache с mod_rewrite: Link1, Link2) или (б) просто посмотрите на хост-часть URL-адреса (например, Request.Url в ASP.NET).

Дополнение от bortzmeyer (извините за перезапись вашего редактирования, возник конфликт редактирования):

Синтаксис подстановочного знака в обычном формате файла зоны DNS (описанном в RFC 1035 и реализованном в BIND, nsd и, возможно, других) со звездочкой:

 *   IN    A   198.51.100.3
person Heinzi    schedule 03.02.2010
comment
@Viet: я расширил ответ. Если вам нужна дополнительная информация (например, о какой-то конкретной технологии), просто спросите. - person Heinzi; 03.02.2010
comment
Я бы предпочел переписать, чем проверять основную часть. Как это можно сделать эффективно? Спасибо! - person Viet; 03.02.2010
comment
Я добавил две ссылки о том, как это сделать с помощью Apache mod_rewrite. - person Heinzi; 03.02.2010
comment
И если я не хочу перенаправления браузера (301/302), что мне делать? Заранее спасибо! - person Viet; 03.02.2010
comment
Я не тестировал примеры, но, насколько я могу судить, они перенаправляют только на стороне сервера, т.е. 301/302 на клиенте нет. Согласно документам (http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html), перенаправление на стороне клиента выполняется только в том случае, если правая часть перенаправления начинается с http://someOtherHost/ или указан флаг [R]. - person Heinzi; 03.02.2010

Для тех, кто не знаком со всеми этими вещами A и CNAME, есть очень простое решение, которое работает с общим хостингом:

Просто зайдите в свою cpanel и добавьте субдомен с помощью *

Например, если ваш домен называется abc.com, вы можете добавить * и выбрать/ввести подкаталог в качестве корня к нему. Когда вы сохраните, он добавит *.abc.com в вашу таблицу поддоменов и добавит все необходимые записи A в ваш файл зоны.

Когда вы нажмете «любой».abc.com в своем браузере, сервер отправит вас в указанное место (подкаталог, который вы упомянули).

Кроме того, для обработки всех (любых) поддоменов для определенного перенаправления вы можете использовать .htaccess в этом подкаталоге для обработки всех входящих запросов поддоменов.

Рабочий пример .htaccess выглядит следующим образом:

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^(^.*)\.abc\.com
RewriteRule (.*)  handler.php?user=%1&%{QUERY_STRING}

</IfModule>

handler.php (код ниже) просто отображает приветственное сообщение с именем поддомена и всей строкой запроса в URL:

$user = $_REQUEST["user"];
print_r($_REQUEST);
echo "Welcome {$user}";

Надеюсь это поможет.

person Waqas Hasan    schedule 02.12.2012