Subdomains on the fly erstellen mit .htaccess (PHP)
Lesezeit: 7 Minuten
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 ServerAliasDOCs
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 ServerAliasDOCs 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:
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.
Vorausgesetzt, Sie können verwenden wildcard subdomainssiehe meine Lösung, um dies zu tun in .htaccess.
– Dan Bray
6. April 2016 um 19:02 Uhr
Ich glaube nicht, dass ein virtueller Host aus .htaccess hinzugefügt werden kann, es macht mich auch nervös wegen der Sicherheit. Ab 2.4 sollte es möglich sein, ein Basisverzeichnis abhängig vom Hostnamen auszuwählen (Aber Dans Methode hat auch einige Probleme). RewriteRule "^/?(.*)" "http://%{HTTP_HOST}/%{HTTP_HOST}/$1" [L,R,NE]
– Symbohne
2. Juni 2017 um 10:49 Uhr
Beachten Sie, dass der PHP-Code, der dies implementiert, NICHT als Webserver-UID ausgeführt werden darf (sollte als dedizierter Benutzer über sudo erfolgen).
– Symbohne
2. Juni 2017 um 10:52 Uhr
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.
Darüber hinaus erfordert es, dass Ihr DNS-Server jeden Subdomain-Namen auflöst.
– Chaos
25. Februar 2009 um 14:19 Uhr
Ich habe dies auf anderen Websites gesehen, müssen sie doch nicht jedes Mal jede Subdomain auflösen, oder?
– Ben McRae
25. Februar 2009 um 14:22 Uhr
Nun, es kommt darauf an, was man darunter versteht. Wenn Sie meinen, dass jedes Mal, wenn jemand im Internet nach foo.somedomain.com sucht und es nicht zwischengespeichert ist, sein DNS-Server es auflösen muss, dann ja.
– Chaos
25. Februar 2009 um 14:26 Uhr
Wenn Sie meinen, müssen sie DNS-Einträge speziell für jede Domain einrichten, siehe Treffynnons Antwort.
– Chaos
25. Februar 2009 um 14:31 Uhr
okay danke dafür. Ich verstehe nicht ganz, was Treffynnon mit der Angabe des Platzhalters im vhost meint?
– Ben McRae
25. Februar 2009 um 14:38 Uhr
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:
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 🙂
Überprüfen Sie, ob es erfolgreich auf cPanel erstellt wurde, und überprüfen Sie per FTP (oder Dateimanager), was sich im Ordner public_html/subdomain befindet. Wenn Sie eine cPanel-Einstellung haben, die Dinge hinzufügt, wenn Sie eine Subdomain erstellen, hat dies nichts mit der Erstellung von Subdomains im laufenden Betrieb zu tun.
– Adrian P.
6. Dezember 2017 um 18:36 Uhr
Nein wurde nicht in cPanel erstellt
– Ruchita Sheth
7. Dezember 2017 um 5:21 Uhr
Dann haben Sie nicht genügend Berechtigungen für cPanel. Ist das Shared Hosting VPS oder dedizierter Server?
– Adrian P.
8. Dezember 2017 um 4:28 Uhr
Es kann mehrere Gründe dafür geben, die Subdomain nicht zu erstellen. Nicht im Zusammenhang mit dem obigen Skript, aber mit Ihrer DNS-Konfiguration. Lesen Sie das und bitten Sie in den cPanel-Foren um Hilfe. forums.cpanel.net/threads/subdomains-not-working.228132
– Adrian P.
10. Dezember 2017 um 16:46 Uhr
Chaos
Es hat nichts mit .htaccess zu tun. Sie müssen DNS-Einträge und virtuelles Hosting für die Subdomains einrichten.
Überprüfen Sie, ob es erfolgreich auf cPanel erstellt wurde, und überprüfen Sie per FTP (oder Dateimanager), was sich im Ordner public_html/subdomain befindet. Wenn Sie eine cPanel-Einstellung haben, die Dinge hinzufügt, wenn Sie eine Subdomain erstellen, hat dies nichts mit der Erstellung von Subdomains im laufenden Betrieb zu tun.
– Adrian P.
6. Dezember 2017 um 18:36 Uhr
Nein wurde nicht in cPanel erstellt
– Ruchita Sheth
7. Dezember 2017 um 5:21 Uhr
Dann haben Sie nicht genügend Berechtigungen für cPanel. Ist das Shared Hosting VPS oder dedizierter Server?
– Adrian P.
8. Dezember 2017 um 4:28 Uhr
Es kann mehrere Gründe dafür geben, die Subdomain nicht zu erstellen. Nicht im Zusammenhang mit dem obigen Skript, aber mit Ihrer DNS-Konfiguration. Lesen Sie das und bitten Sie in den cPanel-Foren um Hilfe. forums.cpanel.net/threads/subdomains-not-working.228132