Как позволить PHP создавать поддомен автоматически для каждого пользователя?
Как создать поддомен типа http://user.mywebsite.com ? Должен ли я каким-то образом получить доступ к htaccess? Можно ли просто создать его с помощью чистого php-кода или мне нужно использовать какой-то внешний скрипт-серверный язык?
для тех, кто ответил: Ну, тогда я должен спросить мой хостинг, если они предоставляют какой-то доступ DNS??
11 ответов:
вы хотите создать пользовательскую запись.
Я уверен, что вы можете использовать подстановочные знаки при указании записи, которая позволит вам сделать что-то вроде этого:
*.mywebsite.com IN A 127.0.0.1127.0.0.1 будет IP-адрес вашего сервера. Способ фактического добавления записи будет зависеть от вашего хоста.
делать это как http://mywebsite.com/user было бы намного проще настроить, если это выбор.
тогда вы могли бы просто добавить.htaccess файл, который выглядит так:
Options +FollowSymLinks RewriteEngine On RewriteRule ^([aA-zZ])$ dostuff.php?username=в приведенном выше, имена пользователей ограничены символами a-z
правило перезаписи для захвата поддомена будет выглядеть следующим образом:
RewriteCond %{HTTP_HOST} ^(^.*)\.mywebsite.com RewriteRule (.*) dostuff.php?username=%1
функция, которую вы ищете, называется Подстановочные Поддоменов. Это позволяет вам не нужно настраивать DNS для каждого поддомена, а вместо этого использовать Apache переписывает для перенаправления. Вы можете найти хороший учебник здесь, но есть тысячи учебников там. Вот необходимый код из этого учебника:
<VirtualHost 111.22.33.55> DocumentRoot /www/subdomain ServerName www.domain.tld ServerAlias *.domain.tld </VirtualHost>однако, поскольку он требовал использования VirtualHosts, он должен быть установлен в httpd сервера.файл conf, а не локальный .htaccess.
Я делаю это немного иначе, чем Марк. Я передаю весь домен и хватаю поддомен в php.
RewriteCond {REQUEST_URI} !\.(png|gif|jpg)$ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /index.php?uri=&hostName=%{HTTP_HOST}это игнорирует изображения и сопоставляет все остальное с моим индексом.PHP-файл. Так что если я пойду в
http://fred.mywebsite.com/album/Dance/nowЯ вернусь
http://fred.mywebsite.com/index.php?uri=album/Dance/now&hostName=fred.mywebsite.comтогда в моем индексе.php код я просто взорвать мое имя пользователя от имени хоста. Это дает мне хорошие довольно SEO url.
мы устанавливаем подстановочные DNS, как они объяснили выше. Таким образом, запись a-это *.yourname.com
тогда все поддомены на самом деле идут в одно и то же место, но PHP рассматривает каждый поддомен как другую учетную запись.
мы используем следующий код:
$url=$_SERVER["REQUEST_URI"]; $account=str_replace(".yourdomain.com","",$url);этот код просто устанавливает
$accountпеременная такая же, как и поддомен. Затем вы можете получить их файлы и другую информацию на основе их учетной записи.это, вероятно, не так эффективно, как способы, которые они перечисляют выше, но если у вас нет доступа к привязке и/или ограничены .htaccess этот метод должен работать (до тех пор, пока ваш хост установит подстановочный знак для вас).
мы фактически используем этот метод для подключения к базе данных клиентов для приложения электронной коммерции нескольких компаний, но он может работать и для вас.
Не суетитесь вокруг .htaccess файлы, когда вы можете использовать виртуальный хостинг Apache mass.
из документации:
#include part of the server name in the filenames VirtualDocumentRoot /www/hosts/%2/docsв некотором смысле это обратная сторона вашего вопроса: каждый "поддомен" является пользователем. Если пользователь не существует, вы получите ошибку 404.
единственным недостатком является то, что переменная окружения
DOCUMENT_ROOTневерно установлено значение используется подкаталог, но по умолчанию document_root в de htconfig.
простое PHP решение для поддоменов и многодоменных веб-приложений
Шаг 1. Предоставьте DNS запись как " * " для доменов (или домена), которые вы собираетесь обслуживать "example.org"
A record => *.example.org A record => *.example.netШаг 2. Проверьте уникальность Логинов при регистрации Пользователя или изменении логина. Кроме того, избегайте точек в этих логинах.
Шаг 3. Затем проверьте запрос
// Request was http://qwerty.example.org $q = explode('.', $_SERVER['HTTP_HOST']); /* We get following array Array ( [0] => qwerty [1] => example [2] => org ) */ // Step 4. // If second piece of array exists, request was for // SUBDOMAIN which is stored in zero-piece $q[0] // otherwise it was for DOMAIN if(isset($q[2])) { // Find stuff in database for login $q[0] or here it is "qwerty" // Use $q[1] to check which domain is asked if u serve multiple domains } ?>это решение может обслуживать разные домены
qwerty.example.org qwerty.example.net johnsmith.somecompany.com paulsmith.somecompany.comЕсли вам нужны одинаковые Ники на разных Домены обслуживаются по-разному, возможно, Вам потребуется сохранить выбор пользователя для домена при регистрации входа в систему.
smith.example.org // Show info about John Smith smith.example.net // Show info about Paul Smith
вы могли бы [потенциально] переписать URL, Но да: вы должны иметь контроль над настройками DNS, чтобы при добавлении пользователя он получал свой собственный поддомен.
в дополнение к изменениям конфигурации на вашем сервере WWW для обработки нового поддомена, ваш код должен будет вносить изменения в ваши записи DNS. Таким образом, если вы не используете собственную привязку (или аналогичную), вам нужно будет выяснить, как получить доступ к конфигурации поставщика сервера имен. Если они не предлагают какой-то API, это может быть сложно.
Update: да, я бы проверил с вашим регистратором, если они также предоставляют услугу сервера имен (как это часто бывает). Я никогда не изучал этот вариант раньше, но я подозреваю, что большинство регистраторов потребителей этого не делают. Я искал API GoDaddy и API DNS GoDaddy, но ничего не смог найти, поэтому я думаю, что лучшим вариантом было бы проверить онлайн-справку с вашим провайдером, и если это не ответит на вопрос, свяжитесь с их персоналом поддержки.
во-первых, вы должны убедиться, что ваш сервер настроен, чтобы разрешить подстановочные поддоменов. Я добился того, что в JustHost путем создания subomain вручную по имени
*. Я также указал папку под названиемsubdomainsкак корень документа для подстановочных поддоменов. Добавьте это к.htaccessфайл в папке поддоменов:RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.website\.com$ RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$ RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*): RewriteRule ^(.*)$ /%1/ [QSA]наконец, все, что вам нужно сделать, это создать папку в папке поддоменов, а затем поместить файлы поддомена в этот каталог.
это может быть достигнуто в
.htaccessпри условии, что ваш сервер настроен на разрешение подстановочных поддоменов. Я добился того, что в JustHost путем создания subomain вручную по имени*и указание папки под названием поддомены в качестве корневого документа для подстановочных поддоменов. Добавьте это к вашему.htaccessfile:RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.website\.com$ RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$ RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*): RewriteRule ^(.*)$ /%1/ [QSA]наконец, создайте папку для вашего поддомена и поместите файлы поддоменов.
Я просто хотел добавить, что если вы используете CloudFlare (бесплатно), вы можете использовать их API для управления dns с легкостью.
Comments