Создавайте поддомены на лету.htaccess (PHP)



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



например, johndoe.website.com



Я думаю, что это будет что-то делать с этим .htaccess файл и возможно перенаправление в другое место на сайте? На самом деле я не знаю. Но любая информация, чтобы начать меня, будет очень признательна.



создание области регистрации не проблема - я делал это много раз. Я просто не знаю, с чего начать с поддомена.

1642   9  

9 ответов:

краткое изложение

  1. вам нужно создать подстановочный домен на вашем DNS-сервере *.website.com
  2. затем в вашем контейнере vhost вам также нужно будет указать подстановочный знак *.website.com -это делается в ServerAlias DOCs
  3. затем извлеките и проверьте поддомен в PHP и отобразите соответствующие данные

длинная версия

1. Создать шаблон ДНС запись

в настройках DNS вам нужно создать универсальное доменное запись например *.example.org. Запись с подстановочным знаком выглядит так:

*.example.org.   3600  A  127.0.0.1

2. Шаблоны в файл vhost

далее в конфигурации Apache вам нужно настроить контейнер vhost, который указывает подстановочный знак в ServerAlias DOCs

вы можете разрешить каждый поддомен в первую очередь, а затем проверить, является ли поддомен действительным. Например:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+\.example\.com$
RewriteRule !^index\.php$ index.php [L]

внутри index.php вы можете извлечь поддомен, используя:

if (preg_match('/^([^.]+)\.example\.com$/', $_SERVER['HTTP_HOST'], $match)) {
    var_dump($match[1]);
}

но все это требует, чтобы ваш веб-сервер принимает каждое имя поддомен.

в дополнение к настройке подстановочного знака DNS, Вы можете взглянуть на динамический массовый виртуальный хостинг для Apache вот как я решил это в прошлом

самый простой способ-перенаправить все поддомены (с подстановочным знаком*), чтобы указать на ваш /wwwroot. Потом положить. htaccess в эту папку со следующим кодом:

RewriteCond %{ENV:REDIRECT_SUBDOMAIN} ="" 
RewriteCond %{HTTP_HOST} ^([a-z0-9][-a-z0-9]+)\.domain\.com\.?(:80)?$ [NC] 
RewriteCond %{DOCUMENT_ROOT}/%1 -d 
RewriteRule ^(.*) %1/ [E=SUBDOMAIN:%1,L] 
RewriteRule ^ - [E=SUBDOMAIN:%{ENV:REDIRECT_SUBDOMAIN},L]

Это позволит выполнить, что каждая подпапка папки / wwwroot в приемлемом через поддомен (foldername.domain.com).

нашел это много лет назад на http://www.webmasterworld.com/apache/3163397.htm

мне было проще сделать это с PHP. По сути это создание поддомена внутри cPanel и создание своей папки под нужным доменным именем. Как вы будете делать это вручную в cPanel, но все это делается в миллисекундах с помощью простой функции PHP. Нет необходимости нажимать:)

function create_subdomain($subDomain,$cPanelUser,$cPanelPass,$rootDomain) {

    //  $buildRequest = "/frontend/x3/subdomain/doadddomain.html?rootdomain=" . $rootDomain . "&domain=" . $subDomain;

    $buildRequest = "/frontend/x3/subdomain/doadddomain.html?rootdomain=" . $rootDomain . "&domain=" . $subDomain . "&dir=public_html/subdomains/" . $subDomain;

    $openSocket = fsockopen('localhost',2082);
    if(!$openSocket) {
        return "Socket error";
        exit();
    }

    $authString = $cPanelUser . ":" . $cPanelPass;
    $authPass = base64_encode($authString);
    $buildHeaders  = "GET " . $buildRequest ."\r\n";
    $buildHeaders .= "HTTP/1.0\r\n";
    $buildHeaders .= "Host:localhost\r\n";
    $buildHeaders .= "Authorization: Basic " . $authPass . "\r\n";
    $buildHeaders .= "\r\n";

    fputs($openSocket, $buildHeaders);
        while(!feof($openSocket)) {
           fgets($openSocket,128);
        }
    fclose($openSocket);

    $newDomain = "http://" . $subDomain . "." . $rootDomain . "/";

   //  return "Created subdomain $newDomain";

}

это не имеет никакого отношения .htaccess. Вам нужно будет настроить DNS-записи и виртуальный хостинг для поддоменов.

к модулю mod_vhost_alias - это правильный модуль для этого.

С помощью одной строки вы можете сказать Apache, чтобы посмотреть в нужном месте, с хэшированием каталога и т. д. Например, строка:

VirtualDocumentRoot /http/users/%3.1/%3.2/%3

хотел сказать Apache, чтобы установить корневой документ /НТТР/пользователям/с/у/поддомена, когда просил для subdomain.yourdomain.com

Я думаю, что wild card DNS с динамическим массовым виртуальным хостингом Apache также является разумным решением. Хотя, я никогда не пробовал.

Если у вас есть необходимость масштабирования на несколько серверов или другие решения просто не работают для вас, я рекомендую использовать DNS-сервер, управляемый базой данных. Я успешно использовал MyDNS в прошлом. Так как он использует MySQL (или PostgreSQL) вы можете обновить DNS на лету с PHP или просто о чем-нибудь еще. Код не работает похоже, что он был обновлен через некоторое время, но это DNS и, следовательно, не совсем передний край.

подстановочные методы создания поддоменов

сначала вы должны создать настройки DNS с помощью редактора DNS сервера.

  1. создать A запись в настройках DNS с хостом * wild card в ip-адрес сервера.

    * 1400 IN A ip_address

  2. создать еще раз a A запись в настройках DNS с хостом @ или domain_name.tld в IP-адрес сервера. tld означает домены верхнего уровня или расширение доменов такие как. com,. org и др....

    @ 1400 IN A ip_address или domain_name.tld 1400 IN A ip_address

  3. создать CNAME запись:

    www 1400 IN A domainname.tld

  4. создайте поддомен с помощью * подстановочный знак, как *.domain.tld
  5. создать htaccess в директории поддомена *.domain.tld и ставим этот код :

    Options +FollowSymLinks 
    RewriteEngine On 
    RewriteBase /
    RewriteRule ^([aA-zZ0-9]+)$ index.php?data=
    RewriteCond %{HTTP_HOST} ^([aA-zZ0-9]+)\.([aA-zZ0-9-]+)\.([aA-zZ]+)
    RewriteRule ([aA-zZ0-9]+) index.php?data=%1
    

    проверьте свой первый подстановочный поддомен, как example.domainname.tld

если вы не интерес для передачи данных в качестве параметра с помощью htaccess, вы также можете получить данные с помощью следующего кода:

define("SUBDOMAIN_PARENT","domainname.tld");   
class getData
    {
         function __construct()
        {
            $this->data="";
            $http_host=$_SERVER['HTTP_HOST'];
         $subdom_data= str_replace(SUBDOMAIN_PARENT,"",$http_host);
         $expl_subdom_data=explode(".",$subdom_data);
      $expl_subdom_data=array_filter($expl_subdom_data);

            if($expl_subdom_data!=NULL)
            {
           $this->data=end($expl_subdom_data);
            }
       }
    }
$GLOBALS['get_data']=new getData();

и использовать глобальную переменную в любом месте, как global $get_data.

echo $get_data->data; //example

(Примечание: этот класс в основном используется для получения точного имени поддомена от 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

(Примечание: подстановочные поддомены не переопределяют существующие поддомены. Потому что первый приоритет всегда для ваших существующих поддоменов)

Comments

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