Frage

Ich suche ein System zu schaffen, die auf die Registrierung wird eine Sub-Domain auf meiner Website erstellen für die Nutzer Fläche ausmachen.

z. johndoe.website.com

ich glaube, es hat etwas mit der .htaccess-Datei zu tun sei und möglicherweise auf der Website an einem anderen Ort umgeleitet? Ich weiß nicht wirklich wissen. Aber alle Informationen, um mich beginnen würde sehr geschätzt werden.

Erstellen Bereich ein Zeichen nach oben ist nicht das Problem - ich habe getan, um diese des Öfteren. Ich bin nur nicht sicher, wo man mit der Sub-Domäne zu starten.

War es hilfreich?

Lösung

Der schnelle Überblick

  1. Sie benötigen eine Wildcard-Domain auf Ihrem DNS-Server erstellen * .website.com
  2. Dann in Ihrem vhost Behälter müssen Sie auch das Wildcard angeben * .website.com - Dies ist in der ServerAlias DOCs
  3. Dann extrahieren und die Sub-Domain in PHP und zeigt die entsprechenden Daten
  4. überprüfen

Die lange Version

1. Erstellen Sie ein Wildcard-DNS-Eintrag

In der DNS-Einstellungen müssen Sie wie *.example.org ein Wildcard-Domain-Eintrag erstellen. Ein Wildcard-Eintrag sieht wie folgt aus:

*.example.org.   3600  A  127.0.0.1

2. Fügen Sie den Platzhalter in vhost

Als nächstes in der Apache-Konfiguration benötigen Sie einen vhost Container einrichten, die die Platzhalter in der ServerAlias DOCs Richtlinie. Ein Beispiel vHost Behälter:

<VirtualHost *:80>
  ServerName server.example.org
  ServerAlias *.example.org
  UseCanonicalName Off
</VirtualHost>

3. Auszuarbeiten, die Sub-Domain Sie in PHP sind

Dann in Ihrer PHP-Skripte können Sie die Domäne, indem Sie in dem $_SERVER Super globales Variable erfahren. Hier ist ein Beispiel für die Sub-Domain in PHP Grabbing:

preg_match('/([^.]+)\.example\.org/', $_SERVER['SERVER_NAME'], $matches);
if(isset($matches[1])) {
    $subdomain = $matches[1];
}

ich Regex hier verwendet haben, für Menschen Schlagen Sie Ihre Website über www.subdomain.example.org oder subdomain.example.org zu ermöglichen.

Wenn Sie noch nie mit antizipieren mit www beschäftigen. (Oder ein andere Sub-Domains), dann können Sie einfach einen Teil verwenden wie folgt:

$subdomain = substr(
                 $_SERVER['SERVER_NAME'], 0,
                 strpos($_SERVER['SERVER_NAME'], '.')
             );

Massen Virtual Hosting

Massen virtuelles Hosting ist eine etwas andere Regelung auf die oben in, dass Sie es in der Regel viele verschiedene Websites verwenden würden eher hosten, als zu versuchen, es zu verwenden, um eine Anwendung als Energie als die Frage schlägt.

Ich habe meine mod_rewrite basierten Massen-Virtual-Hosting-Umgebung, bevor sie in einem Post dokumentiert auf meinem Blog , die Sie aussehen könnte, wenn das ist die Route, die Sie nehmen möchten. Es gibt natürlich auch, die entsprechende Apache-Handbuch Seite .

Apache hat auch einen internen Weg mit Massen-Virtual-Hosting zu tun, das etwas weniger flexibel als die mod_rewrite Methode ist die ich verwendet habe. Dies alles wird beschrieben auf der Apache dynamisch konfiguriert Massen Virtuelle Hosting Handbuch Seite .

Andere Tipps

Sie können jeder Sub-Domain in erster Linie ermöglichen, und dann prüfen, ob die Sub-Domain gültig ist. Zum Beispiel:

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

Im Inneren des index.php können Sie als die Sub-Domain extrahieren mit:

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

Aber all dies setzt voraus, dass der Webserver jeden Sub-Domain Namen akzeptiert.

Neben einer DNS Wildcard einrichten, Sie vielleicht einen Blick auf Dynamische Massen Virtual Hosting für Apache die ist, wie ich dies in der Vergangenheit gelöst haben

Der einfachste Weg ist es, alle Sub-Domains zu umleiten (mit Wildcard *), um Ihre / wwwroot zu zeigen. setzen .htaccess in diesen Ordner dann mit dem folgenden Code:

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

Dies wird erreichen, dass jeder Unterordner des / wwwroot Ordner in akzeptablen über Sub-Domain (foldername.domain.com).

diese Jahre alt Gefunden auf http://www.webmasterworld.com/apache/3163397.htm

Ich fand es einfacher ist es mit PHP zu tun. In der Tat ist eine Sub-Domain innerhalb cPanel erstellen und erstellen Sie Ihre Ordner unter dem gewünschten Domain-Namen. Wie Sie es von Hand in cPanel werden tun, aber alles ist in Millisekunden durch eine einfache PHP-Funktion. Kein Klick nötig:)

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";

}

Es ist nichts mit .htaccess zu tun. Sie müssen DNS-Einträge und virtuelles Hosting für die Subdomains einzurichten.

mod_vhost_alias ist das richtige Modul, dies zu tun.

Mit einer Zeile Sie Apache sagen können, an der richtigen Stelle zu suchen, mit Verzeichnis Hashing usw. Zum Beispiel die Zeile:

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

würde Apache sagen, das Dokument root / http / users / s / u / Sub-Domain zu setzen, wenn für subdomain.yourdomain.com

angefordert

Ich denke, der Wildcard-DNS mit Apache Dynamic Massen Virtual Hosting auch eine vernünftige Lösung ist. Obwohl, ich habe es nie versucht.

Wenn Sie das Bedürfnis haben, auf mehrere Server zu skalieren oder die anderen Lösungen funktionieren einfach nicht für Sie, empfehle ich eine Datenbank gefahrene DNS-Server verwenden. Ich habe erfolgreich MyDNS in der Vergangenheit verwendet. Da es verwendet MySQL (oder PostgreSQL) können Sie Ihre DNS on the fly mit PHP aktualisieren oder einfach nur über etwas anderes. Der Code sieht nicht wie es in einer Weile wurde aktualisiert, aber es ist DNS und daher nicht genau Schnitte.

Wildcard Subdomainerstellung Methoden

Als erstes müssen Sie die DNS-Einstellungen mit Ihrem Server DNS-Editor erstellen.

  1. Erstellen A Datensatz in DNS-Einstellungen mit Host * Wild Card in Server-IP-Adresse.

    * 1400 IN A ip_address

  2. Erstellen Sie erneut einen A Datensatz in DNS-Einstellungen mit Host @ oder domain_name.tld in Server-IP-Adresse. TLD bedeutet Top Level Domains oder die Erweiterung der Bereiche wie .com, .org, etc ....

    @ 1400 IN A ip_address        oder  domain_name.tld 1400 IN A ip_address

  3. Erstellen CNAME Datensatz wie:

    www 1400 IN A domainname.tld

  4. Erstellen Sie die Sub-Domain mit * Wildcard wie *.domain.tld
  5. Erstellen Sie .htaccess in Ihrem Sub-Domain-Verzeichnis von *.domain.tld und setzen diesen Code ein:

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

    Testen Sie Ihre erste Wildcard Sub-Domain wie example.domainname.tld

Wenn Sie nicht interessieren, die Daten als Parameter zu übergeben, die .htaccess verwenden, können Sie auch die Daten erhalten, indem folgende Codierung verwenden:

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();

und Ihre globale Variable an jedem Ort wie global $get_data verwenden.

echo $get_data->data; //example

(beachten Sie:.. Diese Klasse vor allem für die genaue SUBDOMAINNAME von http_host bekommen, weil einige zusätzlichen Namen kombinierten vor Ihrer Sub-Domain auch anwendbar wie www.example.domainname.tld Diese Rückkehr $_GET['data']='wwww' So ist mein Vorschlag, die $_SERVER['http_host'] zu verwenden, um die genauen Werte zu erhalten statt mit den $_SERVER['query_string'] oder weitergegeben .htaccess Parametern in Ihrer Index-Seite)

Die Ausführung dieses Wildcard Sub-Domains verwendet N Sekunden in TTL 6.Geschwindigkeit up -. DNS-Einstellungen

7.Prüfen die Sub-Domain nach dem angegebenen ttl Zeit (600-10 Minuten) wie => http://abc.domain.tld

(Anmerkung:. Wildcard Subdomains nicht bestanden Subdomains überschreiben, da erste Priorität immer für Ihre bestanden Subdomains)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top