Frage

Wie erstelle ich Sub-Domain wie http://user.mywebsite.com ? irgendwie muss ich .htaccess zugreifen? Ist es tatsächlich möglich, einfach es über reinen PHP-Code zu erstellen oder ich brauche etwas externe Skript-Server-Seite Sprache zu benutzen?

Für diejenigen, die beantwortet: Nun, dann soll ich mein Hosting fragen, ob sie irgendeine Art von DNS-Zugriff bieten ??

War es hilfreich?

Lösung

Sie suchen einen benutzerdefinierten Ein Datensatz erstellen.

Ich bin mir ziemlich sicher, dass Sie Platzhalter verwenden können, wenn A-Datensätze anzugeben, die Sie tun so etwas wie diese lassen würden:

*.mywebsite.com       IN  A       127.0.0.1

127.0.0.1 würde die IP-Adresse des Webservers sein. Verfahren nach tatsächlich das Hinzufügen des Datensatzes wird auf dem Host ab.


Ihr es wie http://mywebsite.com/user wäre viel einfacher sein, bis zu setzen, wenn es eine Option.

Dann könnte man nur eine .htaccess-Datei hinzufügen, die wie folgt aussieht:

Options +FollowSymLinks

RewriteEngine On
RewriteRule ^([aA-zZ])$  dostuff.php?username=$1

In dem obigen werden Benutzernamen auf die Zeichen beschränkt a-z


Die Rewrite-Regel für die Sub-Domain Grabbing würde wie folgt aussehen:

RewriteCond %{HTTP_HOST} ^(^.*)\.mywebsite.com
RewriteRule (.*)  dostuff.php?username=%1

Andere Tipps

Die Funktion, die Sie werden nach genannt wird Wildcard Subdomains . Es ermöglicht Ihnen, nicht für jede Sub-Domain-Setup DNS haben, und stattdessen Apache Neufassungen für die Umleitung verwenden. Sie können ein nettes Tutorial finden Sie hier , aber es gibt tausende von Tutorials gibt. Hier ist der notwendige Code aus diesem Tutorial:

<VirtualHost 111.22.33.55>
    DocumentRoot /www/subdomain
    ServerName www.domain.tld
    ServerAlias *.domain.tld
</VirtualHost>

Allerdings, da es die Verwendung von virtuellen Hosts benötigt es muss in der Server-Datei httpd.conf gesetzt werden, statt einer lokalen .htaccess.

Ich mache es ein wenig anders als Mark. Ich gehe die gesamte Domäne und ergreifen Sie die Sub-Domain in PHP.

RewriteCond {REQUEST_URI} !\.(png|gif|jpg)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?uri=$1&hostName=%{HTTP_HOST}

Dies ignoriert Bilder und ordnet alles andere meiner index.php. Also, wenn ich gehe zu

http://fred.mywebsite.com/album/Dance/now

ich zurück

http://fred.mywebsite.com/index.php?uri=album/Dance/now&hostName=fred.mywebsite.com

Da ist in meinem index.php Code i explodieren nur meinen Benutzernamen von den Host-Namen aus. Das gibt mir nett recht SEO URLs.

Wir richten Wildcard DNS, wie sie oben beschrieben. So ist der ein Rekord * .yourname.com

Dann alle Sub-Domains werden tatsächlich an der gleichen Stelle, aber PHP behandelt jedes Sub-Domain als ein anderes Konto.

Wir verwenden den folgenden Code:

$url=$_SERVER["REQUEST_URI"];
$account=str_replace(".yourdomain.com","",$url);

Mit diesem Code wird nur die $account Variable die gleiche wie die Sub-Domain. Sie könnten dann ihre Dateien und andere Informationen abgerufen werden basierend auf ihrem Konto.

Dies ist wahrscheinlich nicht so effizient wie die Art und Weise sie oben aufgeführte Liste, aber wenn Sie keinen Zugang haben zu binden und / oder .htaccess dieses Verfahren beschränkt sollte (wie Ihr Gastgeber wird Setup die Wildcard für Sie so lange) arbeiten .

Wir haben eigentlich diese Methode verwenden, um die Kunden-Datenbank für eine Multi-Unternehmen E-Commerce-Anwendung zu verbinden, aber es kann auch für Sie arbeiten.

Sie Aufheben nicht mit .htaccess-Dateien um, wenn Sie Apache Massen virtuelle verwenden können Hosting .

Aus der Dokumentation:

  

#include part of the server name in the filenames VirtualDocumentRoot /www/hosts/%2/docs

In gewisser Weise ist es die Rückseite Ihrer Frage: jede ‚Sub-Domain‘ ist ein Benutzer. Wenn der Benutzer nicht vorhanden ist, erhalten Sie einen 404 erhalten.

Der einzige Nachteil ist, dass der Umgebungsvariable DOCUMENT_ROOT nicht richtig auf das gesetzt verwendet Unterverzeichnis, aber die Standard-document_root in de htconfig.

Einfache PHP-Lösung für Subdomains und Multi-Domain-Web-Anwendungen

Schritt 1. Geben Sie DNS A-Eintrag als "*" für Domänen (oder Domain) wird mich dienen "example.org"

A record => *.example.org
A record => *.example.net

Schritt 2. Überprüfen Sie uniquity von Anmeldungen, wenn der Benutzer Registrierung oder Login ändern. Vermeiden Sie auch Punkte, die in diesen Anmeldungen.

Schritt 3. Überprüfen Sie dann die Abfrage     

        // Request was http://qwerty.example.org
        $q = explode('.', $_SERVER['HTTP_HOST']);
        /*
            We get following array
            Array
            (
                [0] => qwerty
                [1] => example
                [2] => org
            )
        */

        // Step 4.
        // If second piece of array exists, request was for 
        // SUBDOMAIN which is stored in zero-piece $q[0]
        // otherwise it was for DOMAIN

        if(isset($q[2])) {
            // Find stuff in database for login $q[0] or here it is "qwerty"
            // Use $q[1] to check which domain is asked if u serve multiple domains
        }

?>

Diese Lösung kann verschiedene Domänen dienen

qwerty.example.org
qwerty.example.net 

johnsmith.somecompany.com
paulsmith.somecompany.com

Wenn Sie gleiche Scharten in verschiedenen Domänen benötigen serviert unterschiedlich, Sie benötigen Benutzer Wahl für Domain zu speichern, wenn Login registrieren.

smith.example.org // Show info about John Smith
smith.example.net // Show info about Paul Smith 

Sie könnten [möglicherweise] tun, um eine Neufassung der URL, aber ja: Sie haben die Kontrolle über Ihre DNS-Einstellungen haben, so dass, wenn ein Benutzer hinzugefügt wird es seine eigene Sub-Domain bekommt

.

Neben Konfigurationsänderungen auf dem WWW-Server die neue Sub-Domain, um Ihr Code zu behandeln müßte Änderungen an Ihren DNS-Einträge zu machen. Also, wenn Sie Ihre eigenen BIND (oder ähnliches) ausgeführt wird, müssen Sie herausfinden, wie Sie Ihren Namen Server-Providers Konfiguration zugreifen. Wenn sie nicht eine Art von API bieten, könnte dies schwierig werden.

Update: Ja, ich würde mit Ihrem Registrar überprüfen, ob sie auch den Namen-Server-Dienst bereitstellt (wie es oft der Fall ist). Ich habe entdeckt nie diese Option vor, aber ich vermute, die meisten der Verbraucher Registrare nicht. Ich googeln für GoDaddy APIs und GoDaddy DNS-APIs, konnte aber nicht, etwas drehen, so dass ich denke, die beste Option, um die Online-Hilfe mit Ihrem Provider zu überprüfen wäre, und wenn das nicht die Frage nicht beantworten, erhalten einen halten ihre Support-Mitarbeiter.

Zuerst müssen Sie Ihren Server sicher ist so konfiguriert, Wildcard Sub-Domains zu ermöglichen. Ich erreicht, dass in Justhost durch eine subomain manuell namens * zu schaffen. I angegebene auch einen Ordner subdomains als Dokumentstamm für Wildcard Sub-Domains genannt. Fügen Sie diese auf eine .htaccess Datei in Ihrem Subdomains Ordner:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.website\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1/$1 [QSA]

Schließlich alles, was Sie tun müssen, ist einen Ordner in Ihren Subdomains Ordnern erstellen, legen Sie dann die Dateien der Sub-Domain in diesem Verzeichnis.

Dies kann in .htaccess erreicht werden, vorausgesetzt, der Server Wildcard Sub-Domains zu ermöglichen, konfiguriert ist. I erreicht, dass in Justhost durch eine subomain manuell benannten * Erstellen und einen Ordner genannt Subdomänen als Dokument root für Wildcard Subdomänen angeben. Fügen Sie diese auf Ihre .htaccess-Datei:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.website\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1/$1 [QSA]

Schließlich einen Ordner für Ihre Sub-Domain erstellen und die Subdomains Dateien platzieren.

Ich wollte nur hinzufügen, dass, wenn Sie CloudFlare (kostenlos) verwenden, können Sie ihre API Ihre dns mit Leichtigkeit verwalten können.

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