Как построить поддомен из скрипта - PullRequest
0 голосов
/ 08 января 2010

В моем проекте мне нужно создать поддомен, т.е.

если при регистрации имя пользователя XXX, будет создан поддомен, например XXX.example.com

как это сделать?

Я буду использовать php для написания скриптов.

Ответы [ 6 ]

1 голос
/ 08 января 2010

До тех пор, пока это не для сайтов без SSL, гораздо проще всего не беспокоиться - просто используйте подстановочный домен DNS и vhost, а затем сопоставьте любое поведение, специфичное для домена, в вашем коде PHP. Если вам нужны сайты SSL, то все намного сложнее - вам нужно иметь отдельный IP-адрес / порт для каждого сертификата - и сертификаты woldcard могут быть очень дорогими.

Если вы хотите настроить какой-либо пакет хостинга, то он немного сложнее - как вы поступите, зависит от того, какой веб-сервер и DNS-сервер вы используете.

Если предположить (снова без SSL) с Apache в Unix / POSIX / Linux и выполнить связывание, то снова я перейду к DNS-записи с подстановочными знаками, а затем: 1) создайте базовый каталог для сайта, при желании заполните его набором файлов по умолчанию 2) добавить определение vhost в свой собственный файл в /etc/httpd/conf.d с именем XXX.conf 3) отправить kill -HUP процессу HTTPD (заставляет его читать новые файлы конфигурации без необходимости полного перезапуска).

Стоит отметить, что вы действительно не должны разрешать процессу httpd прямой доступ для записи в свои собственные файлы конфигурации - вы определенно не хотите давать ему привилегии root. Более безопасным решением было бы создать сценарий CLI, чтобы выполнить это, используя имя пользователя в качестве аргумента, затем установить его setuid и вызвать его из сценария, запущенного процессом HTTPD.

С

1 голос
/ 08 января 2010

Я нашел скрипт, который, кажется, делает именно это, создавая субдомен на вашем сервере по требованию. Вероятно, ему нужно немного доработать, чтобы он работал на вашей конкретной панели управления, но, насколько я могу судить, обзор довольно положительный.

Ссылка

Рассматривали ли вы использование htaccess и переписывание URL? Нашел этот код, который может вам помочь:

# Rewrite <subdomain>.example.com/<path> to example.com/<subdomain>/<path>
#
# Skip rewrite if no hostname or if subdomain is www
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
# Extract (required) subdomain (%1), and first path element (%3), discard port number if present (%2)
RewriteCond %{HTTP_HOST}<>%{REQUEST_URI} ^([^.]+)\.example\.com(:80)?<>/([^/]*) [NC]
# Rewrite only when subdomain not equal to first path element (prevents mod_rewrite recursion)
RewriteCond %1<>%3 !^(.*)<>\1$ [NC]
# Rewrite to /subdomain/path
RewriteRule ^(.*) /%1/$1 [L]

Источник (Пост # 6)

1 голос
/ 08 января 2010

Это может быть немного сложнее, чем вы думаете.

Предлагаю немного почитать о переписывании модов и htaccess.

Вы можете начать здесь:

Учебник по htaccess

Учебник по Modrewrite

Пример поддомена Modrewrite

РЕДАКТИРОВАТЬ: Или просто пойти с одним из хороших примеров, предоставленных моим коллегам SO пользователей. ;)

0 голосов
/ 14 июля 2010

Поскольку вы будете создавать субдомены при регистрации пользователя. Попробуйте это как файл .htaccess:

Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^.htaccess$ - [f]

RewriteCond %{HTTP_HOST}!^www.domain.com 
RewriteCond %{HTTP_HOST} ^([^.]+).domain.com 
RewriteRule ^$(.*) /$1/%1 [L]

сделать функцию контроллера, которая будет принимать значение поддомена и отображать то, что необходимо. как ::

public function show ($domain)
{
  **.**..*..**.** Your code goes here
}

когда пользователь попробует это xxx.domain.com / controller / show это будет domain.com / controller / show / xxx . если вы хотите, чтобы xxx.domain.com был domain.com / controller / show / xxx , просто отредактируйте файл htaccess, как хотите.

0 голосов
/ 08 января 2010

Во-первых, вам нужно убедиться, что у вас настроен подстановочный домен в DNS, и убедиться, что ваш веб-сервер (apache?) Направляет все запросы для этого подстановочного домена в ваш php-файл.

Затем в php вы можете посмотреть на $ _SERVER ["HTTP_HOST"], чтобы увидеть, какой поддомен используется для этого конкретного запроса.

0 голосов
/ 08 января 2010

лучший способ - использовать джокера на вашем DNS-сервере:

www.example.com.    IN  A   1.2.3.4
*.example.com.  IN  A   1.2.3.4

Таким образом, не нужно создавать поддомен: все по умолчанию указывают на один и тот же IP-адрес.

В вашем PHP-коде вы просто получаете $ _SERVER ["HOST"] и получаете первую часть:

$hostParts=explode('.',$_SERVER["HTTP_HOST"]);
$user=$hostParts[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...