Frage

Ich möchte Benutzern die Kontrolle über die Subdomain einer App ermöglichen, mit der ich spiele, ähnlich wie Basecamp, wo es sich befindet customusername.seework.com.

Was ist auf der erforderlich? DNS end, damit diese dynamisch erstellt werden können und sofort verfügbar sind.

Und wie empfehlen Sie den Umgang damit in der Logik der Website? Htaccess Regel zum Nachschlagen der Subdomain im DB?

War es hilfreich?

Lösung

Wir tun dies, indem wir ein „Catch-All“ für unseren Domänennamen im DNS registrieren, sodass everything.ourdomain.com auf unseren Server verweist.

Mit Apache können Sie ein ähnliches Catch-All für Ihre Vhosts einrichten.Der ServerName muss ein einzelner statischer Name sein, die ServerAlias-Direktive kann jedoch ein Muster enthalten.

Servername www.ourdomain.com
ServerAlias *.ourdomain.com

Jetzt lösen alle Domänen den Vhost für unser Projekt aus.Der letzte Teil besteht darin, den tatsächlich verwendeten Domänennamen zu entschlüsseln, damit Sie den Benutzernamen in Ihrem Code ermitteln können, etwa (PHP):

list( $username ) = explode( ".", $_SERVER[ "HTTP_HOST" ] );

oder eine RewriteRule, wie bereits vorgeschlagen, die user.ourdomain.com/foo/bar stillschweigend auf www.ourdomain.com/foo/bar?user=user oder was auch immer Sie bevorzugen, zuordnet.

Andere Tipps

Machen Sie sich keine Sorgen über das Umschreiben von DNS und URLs

Ihr DNS-Eintrag wird statisch sein, etwa so:

*.YOURDOMAIN.COM A 123.123.123.123

Bitten Sie Ihren DNS-Anbieter, dies für Sie zu tun (sofern dies noch nicht geschehen ist) oder erledigen Sie es selbst, wenn Sie die Kontrolle über Ihre DNS-Einträge haben.Dadurch werden alle Ihre Subdomains (aktuelle und zukünftige) automatisch auf denselben HTTP-Server verwiesen.

Sobald dies erledigt ist, müssen Sie nur noch den HOST-Header jeder einzelnen HTTP-Anfrage analysieren, um festzustellen, welcher Hostname für den Zugriff auf Ihre serverseitigen Skripts auf Ihrem HTTP-Server verwendet wurde.

Angenommen, Sie verwenden ASP.NET, das ist ein albernes Beispiel, das ich mir ausgedacht habe, das aber funktioniert und die Einfachheit dieses Ansatzes demonstriert:

<%@ Language="C#" %>
<%
string subDomain = Request.Url.Host.Split('.')[0].ToUpper();
if (subDomain == "CLIENTXXX") Response.Write("Hello CLIENTXXX, your secret number is 33");
else if (subDomain == "CLIENTYYY") Response.Write("Hello CLIENTYYY, your secret number is 44");
else Response.Write(subDomain+" doesn't exist");
%>

Der Trick dabei besteht darin, das URL-Rewriting zu verwenden name.domain.com wird transparent auf so etwas abgebildet domain.com/users/name auf Ihrem Server.Sobald Sie diesen Weg eingeschlagen haben, ist die Umsetzung recht einfach.

Ich wollte etwas Ähnliches machen (www.mysite.com/SomeUser).

Was ich getan habe, war, dass ich es bearbeitet habe 404.shtml Um diesen serverseitigen Include-Code (SSI) einzubinden:

<!--#include virtual="404.php" -- >

Dann habe ich die Datei erstellt 404.php, wo ich die URL analysiert habe, um nach dem Namen eines Benutzers zu suchen, und dessen Informationen aus der Datenbank angezeigt habe.

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