Der schnelle Überblick
- Sie müssen eine Platzhalterdomäne auf Ihrem DNS-Server * .website.com erstellen
- Dann müssen Sie in Ihrem vhost-Container auch den Platzhalter angeben * .website.com - Dies erfolgt in den
ServerAlias
DOCs
- Extrahieren und überprüfen 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 einen Platzhalter-Domäneneintrag erstellen, z *.example.org
. Ein Platzhaltereintrag sieht folgendermaßen 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- Direktive angibt . Ein Beispiel für einen vhost-Container:
<VirtualHost *:80>
ServerName server.example.org
ServerAlias *.example.org
UseCanonicalName Off
</VirtualHost>
3. Ermitteln Sie, 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
superglobale Variable schauen . Hier ist ein Beispiel für das Abrufen 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 zu ermöglichen, dass Personen Ihre Website über www.subdomain.example.org oder subdomain.example.org aufrufen.
Wenn Sie nie damit rechnen müssen, sich mit www zu befassen. (oder andere Subdomains) dann könnten Sie einfach einen Teilstring 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 beschriebene, da Sie es normalerweise zum Hosten vieler verschiedener Websites verwenden würden, anstatt zu versuchen, es für eine Anwendung zu verwenden, wie in der Frage vorgeschlagen.
Ich habe meine mod_rewrite-basierte virtuelle Massenhosting-Umgebung bereits in einem Beitrag in meinem Blog dokumentiert , den Sie sich ansehen können, wenn dies der Weg ist, den Sie einschlagen möchten. Natürlich gibt es auch die entsprechende Apache-Handbuchseite .
Apache hat auch eine interne Methode für den Umgang mit virtuellem Massenhosting, die etwas weniger flexibel ist als die von mir verwendete mod_rewrite-Methode. Dies alles wird auf der Handbuchseite Apache Dynamically Configured Mass Virtual Hosting beschrieben .
wildcard subdomains
, sehen Sie meine Lösung, um dies zu tun.htaccess
.RewriteRule "^/?(.*)" "http://%{HTTP_HOST}/%{HTTP_HOST}/$1" [L,R,NE]
Sie können zunächst jede Subdomain zulassen und dann prüfen, ob die Subdomain gültig ist. Beispielsweise:
Innerhalb der können
index.php
Sie dann die Subdomain extrahieren mit:All dies erfordert jedoch, dass Ihr Webserver jeden Subdomainnamen akzeptiert.
quelle
Zusätzlich zum Einrichten eines DNS-Platzhalters möchten Sie vielleicht einen Blick auf Dynamic Mass Virtual Hosting für Apache werfen. So habe ich dies in der Vergangenheit gelöst
quelle
Ich fand es einfacher mit PHP. Tatsächlich wird eine Unterdomäne in cPanel erstellt und Ihr Ordner unter dem gewünschten Domänennamen erstellt. Wie Sie es manuell in cPanel tun werden, aber alles wird in Millisekunden durch eine einfache PHP-Funktion erledigt. Kein Klick nötig :)
quelle
Am einfachsten ist es, alle Subdomains (mit Platzhalter *) umzuleiten, um auf Ihre / wwwroot zu verweisen. Fügen Sie dann .htaccess mit dem folgenden Code in diesen Ordner ein:
Dadurch wird erreicht, dass jeder Unterordner des Ordners / wwwroot über die Unterdomäne (foldername.domain.com) akzeptabel ist.
Gefunden vor Jahren auf http://www.webmasterworld.com/apache/3163397.htm
quelle
Es hat nichts mit .htaccess zu tun. Sie müssen DNS-Einträge und virtuelles Hosting für die Subdomains einrichten.
quelle
Mod_vhost_alias ist das richtige Modul dafür.
Mit einer Zeile können Sie Apache anweisen, an der richtigen Stelle nachzuschauen, mit Verzeichnis-Hashing usw. Zum Beispiel die Zeile:
würde Apache anweisen, das Dokumentstammverzeichnis auf / http / users / s / u / subdomain zu setzen, wenn dies für subdomain.yourdomain.com angefordert wird
quelle
Ich denke, das Wildcard-DNS mit Apaches Dynamic Mass Virtual Hosting ist auch eine vernünftige Lösung. Obwohl ich es nie versucht habe.
Wenn Sie auf mehrere Server skalieren müssen oder die anderen Lösungen für Sie einfach nicht funktionieren, empfehle ich die Verwendung eines datenbankgesteuerten DNS-Servers. Ich habe MyDNS in der Vergangenheit erfolgreich eingesetzt . Da es MySQL (oder PostgreSQL) verwendet, können Sie Ihr DNS im laufenden Betrieb mit PHP oder fast allem anderen aktualisieren. Der Code sieht nicht so aus, als wäre er seit einiger Zeit aktualisiert worden, aber er ist DNS und daher nicht gerade auf dem neuesten Stand.
quelle
Methoden zur Erstellung von Platzhalter-Subdomänen
Zuerst müssen Sie die DNS-Einstellungen mit Ihrem Server-DNS-Editor erstellen.
Erstellen Sie
A
einen Eintrag in den DNS-Einstellungen mit dem Host-*
Platzhalter in der Server-IP-Adresse.* 1400 IN A ip_address
Erstellen Sie erneut einen
A
Eintrag in den DNS-Einstellungen mit Host-@
oderdomain_name.tld
Server-IP-Adresse. tld bedeutet Top-Level-Domains oder die Erweiterung der Domains wie .com, .org, etc ....@ 1400 IN A ip_address
oderdomain_name.tld 1400 IN A ip_address
Erstellen Sie einen
CNAME
Datensatz wie:www 1400 IN A domainname.tld
*
Platzhalter wie*.domain.tld
Erstellen Sie htaccess in Ihrem Subdomain-Verzeichnis von
*.domain.tld
und geben Sie diesen Code ein:Testen Sie Ihre erste Wildcard-Subdomain wie
example.domainname.tld
Wenn Sie nicht daran interessiert sind, die Daten mit htaccess als Parameter zu übergeben, können Sie die Daten auch mithilfe der folgenden Codierung abrufen:
und verwenden Sie Ihre globale Variable an einem beliebigen Ort wie
global $get_data
.(Anmerkung: Diese Klasse hauptsächlich für die bekommen die genaue SUBDOMAINNAME aus ,
http_host
weil einige zusätzliche Namen vor Ihrer Sub - Domain kombiniert ist auch anwendbar , wie.www.example.domainname.tld
Diese Rückkehr.$_GET['data']='wwww'
Also mein Vorschlag die zu verwenden ist$_SERVER['http_host']
für bekommen die genauen Werte , statt die Verwendung$_SERVER['query_string']
das Abrufen oder übergebenen htaccess-Parameter in zu verwenden Ihre Indexseite)6. Beschleunigen Sie die Ausführung dieser Platzhalter-Subdomänen mit N Sekunden in TTL - DNS-EINSTELLUNGEN.
7.Überprüfen Sie die Subdomain nach Ihrer angegebenen Zeit (600 - 10 Minuten) wie =>
http://abc.domain.tld
(Hinweis: Platzhalter-Subdomänen überschreiben die vorhandenen Subdomänen nicht. Weil die erste Priorität immer für Ihre vorhandenen Subdomänen gilt.)
quelle