Я использую скрипт PHP, который создает подпапку для каждого пользователя, когда он регистрируется. например: domain.com/users/user1
Мне нужно сопоставить субдомены с этими подпапками, например: user1.domain.com.
Я использую XAMPP, и я следовал этот урок и это сработало хорошо.
НО я должен сделать это для каждого пользователя / субдомена!
Мне нужно сделать это автоматически, когда пользователь зарегистрируется.
Вы хотите сделать массовый виртуальный хостинг на 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>
Это будет использовать подстановочный знак для установки корня документа запрошенного субдомена.
Я реализовал нечто похожее на это, используя vhost по умолчанию на моем сервере. Предполагая, что у вас настроен DNS, так что все дочерние домены указывают на соответствующий IP-адрес, все они должны перейти в vhost по умолчанию. Папка, на которую указывает vhost по умолчанию, также должна иметь файл index.php, который использует поддомен для предоставления соответствующего содержимого.
Вы можете реплицировать это локально с помощью XAMPP, отредактировав файл / etc / hosts и указав поддомен в локальном dns на localhost. Задайте в своем webroot файл index.php и получите имя домена из переменной $ _SERVER. Оттуда вы можете определить пользователя по поддомену и показывать контент программно.
Вы можете установить панель управления веб-хостингом лайк Plesk или же Webmin взять на себя эту работу для вас. Вы будете использовать дружественный графический интерфейс для настройки поддоменов, и вся начальная настройка будет выполняться в фоновом режиме. Это то, что используют реальные хостинг-провайдеры.
Я думал об этом некоторое время, но никогда не проверял это.
Я думаю, что вы должны попробовать тот же подход, что и некоторые MVC фреймворки, такие как CodeIgniter
Используйте index.php для маршрутизации всех запросов.
получите $ _SERVER [«HTTP_HOST»] и проанализируйте его, чтобы получить свой поддомен.
Теперь в зависимости от вашего субдомена загрузите соответствующий вид (вид как в MVC)