Vra

Ek is op soek na gebruikers in staat stel om beheer van subdomein van 'n app Ek speel met, baie soos basiskamp waar dit customusername.seework.com.

Wat nodig is op die DNS einde toe te laat om hierdie dinamiese word geskep en word onmiddellik beskikbaar.

En hoe doen jy aanbeveel die hantering van hierdie in die logika van die site? Htaccess reël om die subdomein lookup in die DB?

Was dit nuttig?

Oplossing

Die manier waarop ons dit doen, is om 'n "vang al 'vir ons domein naam in DNS geregistreer sodat anything.ourdomain.com sal verwys na ons bediener.

Met Apache jy kan die opstel van 'n soortgelyke catch-all vir jou vhosts. Die ServerName moet 'n enkele statiese naam wees, maar die Server richtlijn kan 'n patroon bevat.

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

Nou al die domeine sal die vhost vir ons projek te aktiveer. Die laaste deel is om die domein naam eintlik gebruik te ontsyfer sodat jy kan uitwerk die gebruikersnaam in jou kode, iets soos (PHP):

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

of 'n RewriteRule as reeds voorgestel dat stilte kaarte user.ourdomain.com/foo/bar om www.ourdomain.com/foo/bar?user=user of wat ook al jy verkies.

Ander wenke

Moenie bekommerd wees oor DNS en URL herskryf

Jou DNS rekord sal staties wees nie, iets soos:

*.YOURDOMAIN.COM A 123.123.123.123

Vra jou DNS verskaffer om dit te doen vir jou (as dit nie reeds gedoen het) of doen dit deur jouself as jy beheer oor jou DNS-rekords het. Dit sal outomaties wys al jou subdomeinen (huidige en toekomstige kinders) in dieselfde HTTP bediener.

Wanneer dit gedoen is, sal jy net aan te bied kop ontleed op elke enkele http versoek om op te spoor wat host naam is gebruik om toegang te verkry tot jou bediener-kant skripte op jou http bediener.

Die veronderstelling wat jy gebruik ASP.NET, hierdie is 'n soort van dom voorbeeld Ek het met maar werke en demonstreer eenvoud van hierdie benadering:

<%@ 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");
%>

Die truuk om dit te URL herskryf so te gebruik dat name.domain.com deursigtig kaarte om so iets domain.com/users/name op jou bediener. Sodra jy daardie pad begin af, is dit redelik triviaal om te implementeer.

Ek is op soek na iets soortgelyks (www.mysite.com/SomeUser) doen.

Wat ek gedoen het, was ek geredigeer 404.shtml om hierdie bediener kant sluit insluit (SSI) kode:

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

Toe geskep ek die lêer 404.php, waar ek ontleed die URL om te kyk vir die naam van 'n gebruiker en het hulle inligting uit die databasis.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top