Frage

Ich weiß, es habe vor ein paar Threads zu diesem Thema gewesen, aber ich habe wirklich alles versucht, vorgeschlagen (das ich finden konnte) und nichts hat sich für mich bisher gearbeitet ...

In diesem Sinne, hier ist das, was ich versuche zu tun:

Zuerst möchte ich, damit Benutzer Seiten veröffentlichen und von denen jeder eine Sub-Domain ihrer Wahl (zB: user.mysite.com) zu geben. Von dem, was ich sammeln kann, ist der beste Weg, dies zu tun, ist user.mysite.com zur Karte mit mod_rewrite und .htaccess mysite.com/user - ist das richtig

Wenn das richtig ist, kann jemand geben Sie mir explizite Anweisungen, wie dies zu tun?

Auch ich ist vor Ort all meiner Entwicklung zu tun, MAMP verwendet wird, so dass, wenn mir jemand sagen könnte, wie meine lokale Umgebung einzurichten in der gleichen Weise zu arbeiten (ich habe gelesen, dies schwieriger ist), würde ich stark bin dankbar. Ehrlich gesagt, ich habe alles ohne Erfolg versucht, und da dies mein erstes Mal ist so etwas wie dies zu tun, bin ich völlig verloren. Vielen Dank für jede Hilfe!

Update: Einige dieser Antworten sind wirklich hilfreich, aber für das System, das ich im Kopf habe, manuell eine Sub-Domain für jeden Benutzer hinzuzufügen, ist keine Option. Was ich wirklich bin gefragt ist, wie dies im laufenden Betrieb zu tun, und umleiten wildcard.mysite.com mysite.com/wildcard - die Art und Weise Tumblr eingerichtet ist ist ein perfektes Beispiel dafür, was Ich mag würde zu tun. Nochmals vielen Dank!

War es hilfreich?

Lösung

Was, wie der DNS-Sub-Domain Wildcard einzurichten, das wäre eine Funktion des DNS-Hosting-Provider sein. Dies würde verschiedene Schritte sein, je nach dem Hosting-Provider Sie haben und wäre eine bessere Frage für sie sein.

Wenn Sie, dass sich mit dem DNS-Host, von Ihrer Web-App gesetzt haben, sind Sie wirklich nur URL-Rewriting, die mit irgendeiner Art von Modul für den Web-Server erfolgen kann sich, wie isapi Umschreiben, wenn Sie sich gerade befinden IIS (dies würde die bevorzugte Route, wenn möglich). Sie können auch als auch auf der Anwendungsebene Umschreiben behandeln (wie wenn auf ASP.NET mit Routing).

Sie würden die URL umschreiben so http://myname.domain.com http://domain.com/something.aspx?name=myname oder so etwas. Von dort aus, behandeln Sie es gerade, als ob der myname Wert als normal in der Abfragezeichenfolge war. Ist das sinnvoll? Hoffe, dass ich nicht falsch verstehen, was Sie nach.

Edit:

Ich behaupte nicht, dass Sie eine Sub-Domain für jeden Benutzer erstellen, sondern eine Wildcard Sub-Domain für die Domain selbst erstellen, so alles .domain.com (im Grunde * .domain.com) geht an deine Seite. Ich habe mehrere Domänen-Setup mit Mydomain . Ihre Anweisungen für das Einrichten dieser Funktion ist wie folgt:

  

Ja, können Sie eine Wild Card konfigurieren, aber   es wird nur funktionieren, wenn Sie es einrichten als   ein Rekord. Wildcards funktionieren nicht   mit einem C-Namen. Um einen Platzhalter verwenden zu können,   Verwenden Sie die astericks Zeichen ‚*‘. Zum   Beispiel: Wenn Sie erstellen und eine Aufzeichnung   mit einer Wild Card, .domain.com,   alles, was an der Stelle eingegeben   wo die ‚‘ befindet, wird lösen   an die angegebene IP-Adresse. Also wenn du   Geben Sie 'www', 'ftp', 'Website' oder   etwas anderes vor dem Domain-Namen,   es wird immer auf die IP lösen   Adresse

Ich habe einige, dass das Setup sind gerade auf diese Art und Weise, mit * .domain.com auf meiner Website gehen. Ich kann dann die Basis-URL in meinem Web-app gelesen, dass ryan.domain.com zu sehen ist, was zur Zeit zugegriffen wird, oder dass bill.domain.com ist, was verwendet wurde. Ich kann dann entweder:

  1. Verwenden Sie URL-Rewriting, so dass die Sub-Domain ein Teil des Abfrage-String wird ODER
  2. Sie einfach den Host-Wert aus dem Zugriff auf URL lesen und einige Logik führen auf diesem Wert.

Ist das sinnvoll? Ich habe mehrere Websites in nur genau diese Art und Weise: die Platzhalter für die Domäne mit der DNS-Host erstellen und dann lesen Sie einfach den Host oder Basis Domäne aus der URL zu entscheiden, was auf Basis angezeigt wird auf der Sub-Domain (das war eigentlich ein Benutzername )

Edit 2:

Es gibt keine Möglichkeit, dies ohne einen DNS-Eintrag zu tun. Die „Online-Welt“ muss wissen, dass name1.domain.com, name2.domain.com, ..., nameN.domain.com alle für Ihren Server die IP-Adresse gehen. Der einzige Weg, dies zu tun ist mit dem entsprechenden DNS-Eintrag. Sie haben den Wildcard-DNS-Eintrag für Ihre Domain mit Ihrer DNS-Host hinzuzufügen. Dann ist es nur eine Frage der Sie die Sub-Domain von der URL zu lesen und die entsprechende Aktion im Code nehmen.

Andere Tipps

Das Beste, was zu tun ist, wenn Sie laufen * AMP zu tun ist, was Thomas schlägt vor, und tut virtuelle Hosts in Apache. Sie können dies tun, entweder mit oder ohne die Umleitung Sie beschreiben.

Virtuelle Hosts

Die meisten wahrscheinlich, dass Sie namensbasierte virtuelle Hosts , wie es am einfachsten einzurichten und erfordert nur eine IP-Adresse (so auch einfach einzurichten und zu testen auf dem lokale MAMP Maschine sein). IP-basierte virtuelle Hosts ist besser, in einigen anderen Punkten, aber Sie haben eine IP-Adresse für jede Domain haben.

Dieses Wikipedia beschreibt die Unterschiede und Links zu einer guten Grund gehen-durch, wie man Sie namensbasierte vhosts am unteren Ende.

Auf dem lokalen Computer für die Prüfung, Sie müssen auch gefälschten DNS-Namen in / etc / hosts für Ihre gefälschten Test Domain-Namen einrichten. dh wenn Sie Apache auf localhost und einrichten vhost1.test.domain und vhost2.test.domain in Ihrem Apache configs hören, würden Sie diese Domains auf die 127.0.0.1 Linie fügen Sie einfach in / etc / hosts, nach localhost:

127.0.0.1 localhost vhost1.test.domain vhost2.test.domain

Wenn Sie die / etc / hosts bearbeiten getan haben und hinzugefügt, um die namensbasierten virtuellen Host configs auf der Apache-Konfigurationsdatei (en), das ist es, starten Sie Apache und Ihre Test-Domains funktionieren sollte.

Redirect mit mod_rewrite

Wenn Sie wollen, Umleitungen mit mod_rewrite (so dass user.example.com nicht direkt gehostet wird und stattdessen Umleitungen an example.com/user), dann werden Sie auch ein RewriteCond tun müssen, um die Sub-Domain entsprechen und umleiten es:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com
RewriteRule ^(.*)$ http://example.com/subdomain$1 [R]

Sie können diese in einem .htaccess oder in Ihrer Haupt-Apache-Konfigurations.

Sie müssen ein Paar Regeln wie die letzten zwei für jede Sub-Domain Sie umleiten möchten hinzuzufügen. Oder können Sie in der Lage sein, die Sub-Domain in einem RewriteCond erfassen zu können, eine Wildcard-Regel verwenden, um zu umleiten * .example.com example.com/ . * - aber das riecht mich vom Sicherheitsstandpunkt wirklich schlecht

Alle zusammen, vhosts und umleiten

Es ist besser, deutlicher und so eingestellt, dass eine virtuelle Hostkonfiguration Abschnitt für jeden Host-Namen auf Sie hören möchten, und für jede dieser Host-Namen in seinem virtuellen Host Config die Rewrite-Regeln setzen. (Es ist immer sicherer und schneller diese Art von Sachen in Ihrem Apache Config zu setzen und nicht .htaccess, wenn Sie es vermeiden können - .htaccess Leistung verlangsamt, weil Apache ist ständig auf das Dateisystem für .htaccess-Dateien Scheuern und neuparsen sie und es ist weniger sicher, da diese von den Nutzern aufgeschraubt werden kann.)

Alle zusammen so, würde die vhost Config in Ihrem Apache configs sein:

NameVirtualHost 127.0.0.1:80

# Your "default" configuration must go first
<VirtualHost 127.0.0.1:80>
  ServerName example.com
  ServerAlias www.example.com
  DocumentRoot /www/siteroot
  # etc.
</VirtualHost>

# First subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
  ServerName vhost1.example.com
  RewriteEngine On
  RewriteRule ^(.*)$ http://example.com/vhost1$1 [R]
</VirtualHost>

# Second subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
  ServerName vhost2.example.com
  RewriteEngine On
  RewriteRule ^(.*)$ http://example.com/vhost2$1 [R]
</VirtualHost>

Ich weiß, dass ich ziemlich spät auf diese Frage antworten, aber ich hatte das gleiche Problem in Bezug auf eine lokale Entwicklungslösung. In andere SO Thread ich gefunden bessere Lösungen und dachten, dass ich sie für alle mit der gleichen Frage in Zukunft teilen würde:

VMware Wildcard-Domain gehört, die jede Sub-Domain auf 127.0.0.1 aufgelöst:

vcap.me resolves to 127.0.0.1
www.vcap.me resolves to 127.0.0.1

oder für mehr Flexibilität 37 Signale besitzen eine Domäne jede Sub-Domain zu einem bestimmten IP abzubilden ein bestimmtes Format verwenden:

127.0.0.1.xip.io resolves to 127.0.0.1
www.127.0.0.1.xip.io resolves to 127.0.0.1
db.192.168.0.1.xip.io resolves to 192.168.0.1

finden Sie unter xip.io für weitere Informationen

Ich bin auf Ubuntu 16.04 und seit 14.04 Ich habe mit Lösung von Dave Evans hier und es funktioniert gut für mich.

  1. Installieren dnsmasq

    sudo apt-get install dnsmasq
    
  2. Neue Datei erstellen localhost.conf unter /etc/dnsmasq.d dir mit der folgenden Zeile

    #file /etc/dnsmasq.d/localhost.conf
    address=/localhost/127.0.0.1
    
  3. Bearbeiten /etc/dhcp/dhclient.conf und fügen Sie die folgende Zeile

    prepend domain-name-servers 127.0.0.1;
    

    (Sie werden wahrscheinlich feststellen, dass diese Linie schon da ist und Sie brauchen nur um den Kommentar aufzuheben.)

  4. Der Letzte ist den Dienst neu starten

    sudo systemctl restart dnsmasq
    sudo dhclient
    

Schließlich sollten Sie prüfen, ob es funktioniert.

dig whatever.localhost

Hinweis:

Wenn Sie es auf Ihrem Webserver verwenden möchten, müssen Sie einfach die 127.0.0.0 auf Ihre tatsächliche IP-Adresse ändern.

Ich hatte genau das gleiche für eine meiner Websites. Sie können die folgenden Schritte durchführen

  1. Wenn Sie cPanel auf Ihrem Server haben, eine Sub-Domain * schaffen, wenn nicht, dann würden Sie Set-up haben einen A-Eintrag in Ihrem DNS (für BIND finden Sie unter http://ma.tt/2003/10/wildcard-dns-and-sub-domains/ ). Auf Ihrem dev. Server würden Sie viel besser fälschen Subdomains werden, indem jeder auf Ihre hosts Datei hinzugefügt wird.

  2. (Wenn Sie cPanel verwendet werden Sie dies nicht tun). Sie werden soemthing wie das folgende in der Apache vhosts-Datei hinzuzufügen haben. Es hängt in hohem Maße ab, welche Art von Server (gemeinsam oder nicht) Sie laufen. Der folgende Code ist nicht vollständig. ES IST GERADE Richtung zu geben. HINWEIS: ServerAlias example.com *.example.com ist wichtig.

    <VirtualHost 127.0.0.1:80>  
            DocumentRoot /var/www/  
            ServerName example.com  
            ServerAlias example.com *.example.com  
    </VirtualHost>
    
  3. Als nächstes, da Sie den PHP-Skript verwenden, können den „Host“ Header und finden Sie heraus, die Sub-Domain und dient Inhalt entsprechend zu überprüfen.

  

Zuerst möchte ich den Benutzern zu ermöglichen,   veröffentlichen Seiten und geben ihnen jeweils ein   Sub-Domain ihrer Wahl (zB:   user.mysite.com). Von dem, was ich kann   sammeln, ist der beste Weg, dies zu tun ist,   Karte user.mysite.com zu mysite.com/user   mit mod_rewrite und .htaccess - ist   das richtig?

Diese können Sie besser mit virtuellen Hosts . Auf diese Weise kann jeder Benutzer eine Webserver-Konfiguration hat ziemlich unabhängig von anderen.

Die Syntax etwas geht:

<VirtualHost *:80>
    DocumentRoot /var/www/user
    ServerName user.mysite.com
    ...
</VirtualHost>

Von dem, was ich auf viele Webhoster gesehen haben, sie Setup einen virtuellen Host auf Apache.

Also, wenn Ihr www.mysite.com von / var / www serviert wird, können Sie einen Ordner für jeden Benutzer erstellen. Dann ordnen Sie die virtuellen Host in diesen Ordner.

Damit beide mysite.com/user und user.mysite.com funktioniert.

Wie für Ihre Testumgebung, wenn Sie auf Windows verfügbar sind, würde ich vorschlagen, Ihre HOSTS-Datei bearbeiten mysite.com auf Ihrem lokalen PC zur Karte (127.0.0.1), sowie alle Subdomains Sie zum Testen einrichten.

scroll top