Hvordan lage underdomene brukerkontoer i en webapp

stemmer
21

Jeg ønsker å tillate brukere å kontrollere for underdomene av en app jeg leker med, mye som Basecamp hvor det er customusername.seework.com.

Hva kreves på DNSslutten for å tillate disse skal opprettes dynamisk og være tilgjengelig umiddelbart.

Og hvordan anbefaler dere å håndtere dette i logikken i området? Htaccessregel å slå opp underdomene i DB?

Publisert på 04/08/2008 klokken 12:22
kilden bruker
På andre språk...                            


4 svar

stemmer
13

Måten vi gjør dette på er å ha en 'catch all' for vår domenenavn registrert i DNS slik at anything.ourdomain.com vil peke på vår server.

Med Apache kan du sette opp en tilsvarende catch-all for dine vhosts. Server må være en enkelt statisk navn, men Serverdirektivet kan inneholde et mønster.

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

Nå alle domenene vil utløse vhost for vårt prosjekt. Den siste delen er å dekode domenenavnet faktisk brukes, slik at du kan arbeide ut brukernavn i koden din, noe som (PHP):

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

eller en RewriteRule som allerede antydet at lydløst kart user.ourdomain.com/foo/bar å www.ourdomain.com/foo/bar?user=user eller hva du foretrekker.

Svarte 04/08/2008 kl. 13:39
kilden bruker

stemmer
8

Ikke bekymre deg om DNS og URL omskrivning

DNS-posten vil være statisk, noe sånt som:

*.YOURDOMAIN.COM A 123.123.123.123

Spør din DNS-leverandør til å gjøre det for deg (hvis det ikke er gjort allerede) eller gjøre det selv om du har kontroll over DNS-postene. Dette vil automatisk peke alle underdomenene (nåværende og fremtidige ones) i samme HTTP-server.

Når det er gjort, vil du bare trenger å analysere HOST header på hver enkelt HTTP-forespørsel til å oppdage hva vertsnavn ble brukt for å få tilgang til server-side skript på http server.

Antar du bruker ASP.NET, dette er litt dumt eksempel jeg kom opp med, men fungerer og demonstrerer enkelhet i denne tilnærmingen:

<%@ 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");
%>
Svarte 04/08/2008 kl. 12:32
kilden bruker

stemmer
2

Trikset til det er å bruke URL skrive slik at name.domain.com transparent tilordnet noe sånt domain.com/users/name på serveren din. Når du starter ned den veien, det er ganske trivielt å implementere.

Svarte 04/08/2008 kl. 12:28
kilden bruker

stemmer
0

Jeg var ute for å gjøre noe lignende ( www.mysite.com/SomeUser).

Det jeg gjorde var jeg redigert 404.shtmlå inkludere denne server side include (SSI) kode:

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

Da jeg opprettet filen 404.php, hvor jeg analysert URL for å se etter en brukers navn og viste sin info fra databasen.

Svarte 12/10/2009 kl. 15:28
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more