Как автоматически сопоставить поддомен с подпапкой

Я использую скрипт PHP, который создает подпапку для каждого пользователя, когда он регистрируется. например: domain.com/users/user1

Мне нужно сопоставить субдомены с этими подпапками, например: user1.domain.com.

Я использую XAMPP, и я следовал этот урок и это сработало хорошо.

НО я должен сделать это для каждого пользователя / субдомена!

Мне нужно сделать это автоматически, когда пользователь зарегистрируется.

4

Решение

Вы хотите сделать массовый виртуальный хостинг на Apache. Здесь вы найдете информацию, как это сделать:

Динамически настраиваемый массовый виртуальный хостинг

На основе примера из учебника вы связали:

NameVirtualHost *
<VirtualHost *>
DocumentRoot "C:\xampp\htdocs"ServerName localhost
</VirtualHost>
<VirtualHost *>
DocumentRoot "C:\Documents and Settings\Me\My Documents\clientA\website"ServerName clientA.local
<Directory "C:\Documents and Settings\Me\My Documents\clientA\website">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *>
DocumentRoot "C:\Documents and Settings\Me\My Documents\clientB\website"ServerName clientB.local
<Directory "C:\Documents and Settings\Me\My Documents\clientB\website">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

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

Сначала вам нужна запись на вашем DNS-сервере для сопоставления всех поддоменов с вашим сервером. Как это:

*.local. 3600 IN A x.x.x.x

Чтобы проверить это на локальном хосте, вы можете установить несколько поддоменов в своем hosts подать вручную. Увидеть Вот почему невозможно установить поддомен подстановочного знака в hosts файл.

Не забудьте загрузить модуль vhost_alias_module в httpd.conf:

LoadModule vhost_alias_module modules/mod_vhost_alias.so

Затем вы замените конфигурацию vhost, как в этом примере:

<VirtualHost *>
# get the server name from the Host: header
UseCanonicalName Off

# this log format can be split per-virtual-host based on the first field
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon

# include the server name in the filenames used to satisfy requests
VirtualDocumentRoot "C:/Documents and Settings/Me/My Documents/%1/website"
<Directory "C:/Documents and Settings/Me/My Documents/*/website">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Require all granted
DirectoryIndex  index.php index.html index.htm
</Directory>
</VirtualHost>

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

4

Другие решения

Я реализовал нечто похожее на это, используя vhost по умолчанию на моем сервере. Предполагая, что у вас настроен DNS, так что все дочерние домены указывают на соответствующий IP-адрес, все они должны перейти в vhost по умолчанию. Папка, на которую указывает vhost по умолчанию, также должна иметь файл index.php, который использует поддомен для предоставления соответствующего содержимого.

Вы можете реплицировать это локально с помощью XAMPP, отредактировав файл / etc / hosts и указав поддомен в локальном dns на localhost. Задайте в своем webroot файл index.php и получите имя домена из переменной $ _SERVER. Оттуда вы можете определить пользователя по поддомену и показывать контент программно.

1

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

1

Я думал об этом некоторое время, но никогда не проверял это.
Я думаю, что вы должны попробовать тот же подход, что и некоторые MVC фреймворки, такие как CodeIgniter

Используйте index.php для маршрутизации всех запросов.
получите $ _SERVER [«HTTP_HOST»] и проанализируйте его, чтобы получить свой поддомен.
Теперь в зависимости от вашего субдомена загрузите соответствующий вид (вид как в MVC)

0
По вопросам рекламы [email protected]