
Ben McRae
Ich möchte ein System erstellen, das bei der Anmeldung eine Subdomain auf meiner Website für den Benutzerkontobereich erstellt.
zB johndoe.website.com
Ich denke, es würde etwas mit der .htaccess-Datei zu tun haben und möglicherweise zu einer anderen Stelle auf der Website umgeleitet werden? Ich weiß es nicht. Aber jede Information, um mich anzufangen, wäre sehr dankbar.
Das Erstellen eines Anmeldebereichs ist nicht das Problem – ich habe das schon oft gemacht. Ich bin mir nur nicht sicher, wo ich mit der Subdomain anfangen soll.

Treffynnon
Der Schnelldurchlauf
- Sie müssen eine Wildcard-Domain auf Ihrem DNS-Server *.website.com erstellen
- Dann müssen Sie in Ihrem vhost-Container auch den Platzhalter *.website.com angeben – Dies geschieht in der
ServerAlias
DOCs
- Extrahieren und verifizieren Sie dann die Subdomain in PHP und zeigen Sie die entsprechenden Daten an
Die lange Version
1. Erstellen Sie einen Platzhalter-DNS-Eintrag
In Ihren DNS-Einstellungen müssen Sie eine Wildcard-Domain-Eintrag wie zum Beispiel *.example.org
. Ein Wildcard-Eintrag sieht so aus:
*.example.org. 3600 A 127.0.0.1
2. Fügen Sie den Platzhalter in vhost ein
Als nächstes müssen Sie in der Apache-Konfiguration einen vhost-Container einrichten, der den Platzhalter in der ServerAlias
DOCs Richtlinie. Ein Beispiel für einen vhost-Container:
<VirtualHost *:80>
ServerName server.example.org
ServerAlias *.example.org
UseCanonicalName Off
</VirtualHost>
3. Finden Sie heraus, auf welcher Subdomain Sie sich in PHP befinden
Dann können Sie in Ihren PHP-Skripten die Domäne herausfinden, indem Sie in die $_SERVER
Super globale Variable. Hier ist ein Beispiel für das Erfassen der Subdomain in PHP:
preg_match('/([^.]+)\.example\.org/', $_SERVER['SERVER_NAME'], $matches);
if(isset($matches[1])) {
$subdomain = $matches[1];
}
Ich habe hier Regex verwendet, um es Leuten zu ermöglichen, Ihre Website über www.subdomain.example.org oder subdomain.example.org zu besuchen.
Wenn Sie nie damit rechnen, sich mit www. (oder andere Subdomains) dann könnten Sie einfach eine Teilzeichenfolge wie folgt verwenden:
$subdomain = substr(
$_SERVER['SERVER_NAME'], 0,
strpos($_SERVER['SERVER_NAME'], '.')
);
Virtuelles Massenhosting
Virtuelles Massenhosting ist ein etwas anderes Schema als das oben genannte, da Sie es normalerweise verwenden würden, um viele verschiedene Websites zu hosten, anstatt zu versuchen, es für eine Anwendung zu verwenden, wie die Frage vorschlägt.
Ich habe meine auf mod_rewrite basierende virtuelle Massenhosting-Umgebung zuvor in a dokumentiert auf meinem Blog posten, die Sie sich ansehen könnten, wenn dies die Route ist, die Sie nehmen möchten. Natürlich gibt es auch die entsprechende Apache-Handbuchseite.
Apache hat auch eine interne Art, mit virtuellem Massenhosting umzugehen, die etwas weniger flexibel ist als die von mir verwendete mod_rewrite-Methode. Dies ist alles auf dem Apache beschrieben Handbuchseite Dynamisch konfiguriertes virtuelles Massenhosting.
Sie könnten zunächst jede Subdomain zulassen und dann prüfen, ob die Subdomain gültig ist. Zum Beispiel:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+\.example\.com$
RewriteRule !^index\.php$ index.php [L]
Im Inneren des index.php
Sie können dann die Subdomain extrahieren mit:
if (preg_match('/^([^.]+)\.example\.com$/', $_SERVER['HTTP_HOST'], $match)) {
var_dump($match[1]);
}
All dies erfordert jedoch, dass Ihr Webserver jeden Subdomain-Namen akzeptiert.
Zusätzlich zum Einrichten eines DNS-Wildcards sollten Sie sich vielleicht einen Blick darauf werfen Dynamisches virtuelles Massenhosting für Apache so habe ich das in der Vergangenheit gelöst
Am einfachsten ist es, alle Subdomains (mit Platzhalter *) so umzuleiten, dass sie auf Ihr /wwwroot zeigen. Legen Sie dann .htaccess mit dem folgenden Code in diesen Ordner:
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]
Dadurch wird erreicht, dass jeder Unterordner des Ordners /wwwroot über die Subdomain (Ordnername.domain.com) akzeptiert wird.
Fand dies vor Jahren auf
http://www.webmasterworld.com/apache/3163397.htm

Adrian P.
Ich fand es einfacher, es mit PHP zu tun. Tatsächlich erstellen Sie eine Subdomain innerhalb von cPanel und erstellen Ihren Ordner unter dem gewünschten Domainnamen. Wie Sie es manuell in cPanel tun, aber alles wird in Millisekunden durch eine einfache PHP-Funktion erledigt. 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 . "https://stackoverflow.com/";
// return "Created subdomain $newDomain";
}

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

Julien
Mod_vhost_alias ist das richtige Modul dafür.
Mit einer Zeile können Sie Apache anweisen, 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 anweisen, den Dokumentenstamm auf /http/users/s/u/subdomain zu setzen, wenn er für subdomain.yourdomain.com angefordert wird
9896500cookie-checkSubdomains on the fly erstellen mit .htaccess (PHP)yes