Как позволить PHP создавать поддомен автоматически для каждого пользователя?



Как создать поддомен типа http://user.mywebsite.com ? Должен ли я каким-то образом получить доступ к htaccess? Можно ли просто создать его с помощью чистого php-кода или мне нужно использовать какой-то внешний скрипт-серверный язык?



для тех, кто ответил: Ну, тогда я должен спросить мой хостинг, если они предоставляют какой-то доступ DNS??

874   11  

11 ответов:

вы хотите создать пользовательскую запись.

Я уверен, что вы можете использовать подстановочные знаки при указании записи, которая позволит вам сделать что-то вроде этого:

*.mywebsite.com       IN  A       127.0.0.1

127.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 вручную по имени * и указание папки под названием поддомены в качестве корневого документа для подстановочных поддоменов. Добавьте это к вашему .htaccess file:

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

    Ничего не найдено.