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

StackOverflow https://stackoverflow.com/questions/1841006

  •  12-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Можете ли вы указать Apache прочитать дополнительный файл .conf?(традиционно вы храните свои виртуальные хосты в 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.имя_домена.com/index.php

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

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

Другие советы

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

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

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

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

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

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

  $nameChunks = explode('.', $_SERVER['HTTP_HOST']);
  $subDomainName = $nameChunks[count($nameChunks) - 3];

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

ЕСЛИ ваш экземпляр 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).

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

На самом деле вы не «создаете поддомены при регистрации пользователя».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top