Краткое изложение
- Вам необходимо создать домен с подстановочными знаками на вашем DNS-сервере * .website.com
- Затем в вашем контейнере vhost вам нужно будет также указать подстановочный знак * .website.com - это делается в
ServerAlias
DOC
- Затем извлеките и проверьте субдомен в PHP и отобразите соответствующие данные.
Длинная версия
1. Создайте запись DNS с подстановочными знаками.
В настройках DNS вам необходимо создать запись домена с подстановочными знаками, например *.example.org
. Запись с подстановочными знаками выглядит так:
*.example.org. 3600 A 127.0.0.1
2. Включите подстановочный знак в vhost
Затем в конфигурации Apache вам необходимо настроить контейнер vhost, который указывает подстановочный знак в директиве ServerAlias
DOCs . Пример контейнера vhost:
<VirtualHost *:80>
ServerName server.example.org
ServerAlias *.example.org
UseCanonicalName Off
</VirtualHost>
3. Определите, на каком поддомене вы находитесь в PHP.
Затем в своих сценариях PHP вы можете узнать домен, просмотрев $_SERVER
суперглобальную переменную. Вот пример захвата поддомена в PHP:
preg_match('/([^.]+)\.example\.org/', $_SERVER['SERVER_NAME'], $matches);
if(isset($matches[1])) {
$subdomain = $matches[1];
}
Я использовал здесь регулярное выражение, чтобы люди могли заходить на ваш сайт через www.subdomain.example.org или subdomain.example.org.
Если вы никогда не ожидаете, что придется иметь дело с www. (или другие поддомены), тогда вы можете просто использовать такую подстроку:
$subdomain = substr(
$_SERVER['SERVER_NAME'], 0,
strpos($_SERVER['SERVER_NAME'], '.')
);
Массовый виртуальный хостинг
Массовый виртуальный хостинг - это схема, немного отличающаяся от приведенной выше, поскольку вы обычно используете его для размещения множества различных веб-сайтов, а не пытаетесь использовать его для работы приложения, как предлагает вопрос.
Я задокументировал свою среду массового виртуального хостинга на основе mod_rewrite ранее в сообщении в моем блоге , и вы могли бы посмотреть на него, если хотите пойти по этому пути. Также, конечно же, есть соответствующая страница руководства Apache .
У Apache также есть внутренний способ работы с массовым виртуальным хостингом, который немного менее гибкий, чем метод mod_rewrite, который я использовал. Все это описано на странице руководства Apache Dynamically Configured Mass Virtual Hosting .
wildcard subdomains
, см. Мое решение для этого в.htaccess
.RewriteRule "^/?(.*)" "http://%{HTTP_HOST}/%{HTTP_HOST}/$1" [L,R,NE]
Вы можете сначала разрешить каждый субдомен, а затем проверить, действителен ли субдомен. Например:
Внутри
index.php
вы можете извлечь поддомен, используя:Но все это требует, чтобы ваш веб-сервер принимал каждое имя поддомена.
источник
В дополнение к настройке подстановочного знака DNS вы можете взглянуть на Dynamic Mass Virtual Hosting для Apache, и именно так я решил эту проблему в прошлом.
источник
Мне было проще делать это с помощью PHP. Фактически создается субдомен в cPanel и создается ваша папка под желаемым доменным именем. Как вы будете делать это вручную в cPanel, но все это делается за миллисекунды с помощью простой функции PHP. Щелкать не нужно :)
источник
Самый простой способ - перенаправить все поддомены (с подстановочным знаком *), чтобы они указывали на ваш / wwwroot. Затем поместите .htaccess в эту папку со следующим кодом:
Это приведет к тому, что каждая подпапка в папке / wwwroot будет доступна через поддомен (имя_папки.domain.com).
Найдено несколько лет назад на http://www.webmasterworld.com/apache/3163397.htm
источник
Это не имеет отношения к .htaccess. Вам необходимо настроить записи DNS и виртуальный хостинг для поддоменов.
источник
Mod_vhost_alias - правильный модуль для этого.
С помощью одной строки вы можете указать Apache, чтобы он смотрел в нужное место, с хешированием каталогов и т. Д. Например, строка:
сообщит Apache установить корень документа в / http / users / s / u / subdomain при запросе для subdomain.yourdomain.com
источник
Я думаю, что альтернативный DNS с динамическим массовым виртуальным хостингом Apache также является разумным решением. Хотя, никогда не пробовал.
Если вам необходимо масштабировать до нескольких серверов или другие решения просто не работают для вас, я рекомендую использовать DNS-сервер, управляемый базой данных. Раньше я успешно использовал MyDNS . Поскольку он использует MySQL (или PostgreSQL), вы можете обновлять свой DNS «на лету» с помощью PHP или чего-то еще. Код не выглядит так, как будто он обновлялся какое-то время, но это DNS и, следовательно, не совсем ультрасовременный.
источник
Методы создания поддоменов с подстановочными знаками
Во-первых, вам необходимо создать настройки DNS с помощью редактора DNS вашего сервера.
Создайте
A
запись в настройках DNS с подстановочным*
знаком хоста в IP-адресе сервера.* 1400 IN A ip_address
Создайте еще раз
A
запись в настройках DNS с хостом@
илиdomain_name.tld
IP-адресом сервера. tld означает домены верхнего уровня или расширение доменов, таких как .com, .org и т. д.@ 1400 IN A ip_address
илиdomain_name.tld 1400 IN A ip_address
Создайте
CNAME
запись типа:www 1400 IN A domainname.tld
*
подстановочным знаком, например*.domain.tld
Создайте htaccess в каталоге вашего поддомена
*.domain.tld
и поместите этот код:Проверьте свой первый поддомен с подстановочными знаками, например
example.domainname.tld
Если вам не интересно передавать данные в качестве параметра с помощью htaccess, вы также можете получить данные, используя следующую кодировку:
и используйте свою глобальную переменную в любом месте, например
global $get_data
.(примечание: этот класс в основном используется для получения точного имени поддомена из
http_host
. потому что некоторые дополнительные имена, объединенные перед вашим поддоменом, также применимы, напримерwww.example.domainname.tld
. Этот возврат$_GET['data']='wwww'
Итак, я предлагаю использовать$_SERVER['http_host']
для получения точных значений вместо использования$_SERVER['query_string']
или переданных параметров htaccess в ваша индексная страница)6. Ускорьте выполнение этого поддомена с подстановочными знаками, используя N секунд в TTL - НАСТРОЙКИ DNS.
7.Проверьте субдомен после заданного времени ttl (600-10 минут), например =>
http://abc.domain.tld
(примечание: поддомены с подстановочными знаками не отменяют существующие поддомены. Поскольку первый приоритет всегда для ваших существующих поддоменов)
источник