Domanda

Sto cercando di consentire agli utenti di controllare il sottodominio di un'app con cui sto giocando, proprio come Basecamp dove si trova customusername.seework.com.

Cosa è richiesto sul DNS end per consentire la loro creazione dinamica e la loro disponibilità immediata.

E come consigli di affrontare questa cosa nella logica del sito? Htaccess regola per cercare il sottodominio nel file DB?

È stato utile?

Soluzione

Il modo in cui lo facciamo è avere un "catch all" per il nostro nome di dominio registrato nel DNS in modo che qualsiasi cosa.nostrodominio.com punti al nostro server.

Con Apache puoi impostare un sistema simile per i tuoi vhost.Il ServerName deve essere un singolo nome statico ma la direttiva ServerAlias ​​può contenere un modello.

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

Ora tutti i domini attiveranno il vhost per il nostro progetto.La parte finale è decodificare il nome di dominio effettivamente utilizzato in modo da poter ricavare il nome utente nel codice, qualcosa come (PHP):

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

o una RewriteRule come già suggerito che mappa silenziosamente user.ourdomain.com/foo/bar a www.ourdomain.com/foo/bar?user=user o qualunque cosa tu preferisca.

Altri suggerimenti

Non preoccuparti della riscrittura di DNS e URL

Il tuo record DNS sarà statico, qualcosa del tipo:

*.YOURDOMAIN.COM A 123.123.123.123

Chiedi al tuo provider DNS di farlo per te (se non lo hai già fatto) o fallo da solo se hai il controllo sui tuoi record DNS.Questo punterà automaticamente tutti i tuoi sottodomini (attuali e futuri) allo stesso server HTTP.

Una volta terminato, dovrai solo analizzare l'intestazione HOST su ogni singola richiesta http per rilevare quale nome host è stato utilizzato per accedere agli script lato server sul tuo server http.

Supponendo che tu stia utilizzando ASP.NET, questo è un esempio sciocco che mi è venuto in mente ma funziona e dimostra la semplicità di questo approccio:

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

Il trucco è usare la riscrittura degli URL in questo modo nome.dominio.com mappa in modo trasparente a qualcosa di simile dominio.com/utenti/nome sul tuo server.Una volta iniziato questo percorso, è abbastanza banale da implementare.

Stavo cercando di fare qualcosa di simile (www.mysite.com/SomeUser).

Quello che ho fatto è stato modificare 404.shtml per includere questo codice server side include (SSI):

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

Poi ho creato il file 404.php, dove ho analizzato l'URL per verificare il nome di un utente e ho mostrato le sue informazioni dal database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top