Создать поддомен после регистрации пользователя - PullRequest
5 голосов
/ 03 декабря 2009

У меня есть веб-сайт, на котором я хочу, чтобы пользователи, которые зарегистрировались, получили свой собственный поддомен. Этот поддомен является виртуальным, и каждый поддомен использует одни и те же файлы веб-сервера.

Я использую PHP и Apache и знаю о виртуальных хостах, но мне интересно, куда мне нужно поместить код vhosts. Во-первых, у меня нет доступа к httpd.conf. Во-вторых, я хочу, чтобы это делалось автоматически при регистрации.

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

Ответы [ 4 ]

7 голосов
/ 03 декабря 2009

Можете ли вы сказать apache прочитать дополнительный файл .conf? (традиционно вы храните свои vhosts в httpd-vhosts.conf)

если это так, добавьте что-то вроде следующего и перезапустите ваш веб-сервер

NameVirtualHost *:80

<VirtualHost *:80>
        DocumentRoot /abs/path/to/webroot
        ServerName   domainname.com
        ServerAlias *.domainname.com
        <Directory /abs/path/to/webroot>
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

затем в php вы можете увидеть, какой поддомен запрашивает пользователь, проверив:

$_SERVER['HTTP_HOST']

т. если пользователь запрашивает http://user1.domainname.com/index.php

$ _ SERVER ['HTTP_HOST'] будет иметь user1.domainname.com

затем вы можете взорваться ('.', $ _SERVER ['HTTP_HOST']), чтобы проверить каждый сегмент ... и т. Д.

2 голосов
/ 03 декабря 2009

Для этого вам понадобится 3 вещи:

1. Установите свой DNS для * .yourDomain.com

2. Добавьте директиву ServerAlias ​​в конфигурацию apache для этого домена:

ServerName www.yourDomain.com
ServerAlias *.yourDomain.com yourDomain.com

Также убедитесь, что на вашем сервере Apache UseCanonicalName установлено значение on (по умолчанию)

3. Grep имя субдомена с помощью PHP:

  $nameChunks = explode('.', $_SERVER['HTTP_HOST']);
  $subDomainName = $nameChunks[count($nameChunks) - 3];
2 голосов
/ 03 декабря 2009

(вдохновлено комментарием Янека)

ЕСЛИ ваш экземпляр Apache настроен на * псевдонимы, то вам не нужно создавать виртуальный именованный хост - вы можете подделать его с помощью PHP, оценив $ _SERVER ['HTTP_HOST'].

Чтобы определить, будет ли ваш экземпляр Apache обрабатывать его, отредактируйте локальный файл / etc / hosts (или эквивалент Windows -% SystemRoot% \ system32 \ drivers \ etc \ hosts) так, чтобы требуемое виртуальное имя указывало на ваш сервер.

Например

# An example HOSTS file.
192.168.1.4 testserver testserver.com subdomain.testserver.com secondname.com

Предполагается, что 192.168.1.4 - это IP вашего сервера. Все, что после этого - псевдоним, который можно назвать сервером.

Затем, как Янек предложил создать страницу, которая будет echo $_SERVER['HTTP_HOST'], чтобы увидеть, правильно ли она захватывает имя. Если это так, то все, что требуется, - это изменение DNS, и Apache может остаться без изменений.

В противном случае без доступа к Apache.conf (этот тип подразумевает, что у вас нет доступа ко многим вещам), это будет трудно осуществить. Программирование не будет - но реализация будет.

И вот почему:

  1. Apache по умолчанию будет обслуживать виртуальные хосты. Но вам нужен доступ к каталогу conf сервера (часто расположен в /etc/httpd/conf.d/), чтобы вы могли создать «включаемый» файл виртуального хоста (если конфигурация Apache настроена на его включение - самые последние установки должны быть).

  2. Вам нужно будет иметь возможность запустить Apache (перезапустить). Без этого изменения виртуального хоста не вступят в силу.

  3. Вам нужно будет сменить DNS. Вы всегда можете изменить свой локальный файл / etc / hosts - но для того, чтобы посетители могли попасть на ваш сайт, вам нужно будет пройти через изменение DNS. (Что может быть мгновенным - или может потребоваться 24 часа для распространения).

Сценарии, безусловно, могут быть выполнены (см. Cpanel и WHM)

1 голос
/ 03 ноября 2012

Прежде всего вам необходимо настроить DNS-сервер для разрешения любых поддоменов с вашим основным IP-адресом, т. Е. *.domain.com придется преобразовать в IP-адрес вашего сервера. Затем веб-сервер должен обрабатывать все входящие запросы независимо от субдомена, вызывая некоторый PHP-скрипт. Затем скрипт PHP может просто определить, какой домен был запрошен из заголовка $_SERVER['HTTP_HOST'], и действовать соответственно.

Вы на самом деле не "создаете субдомены после регистрации пользователя".

...