Come creare account utente di sottodominio in una webapp
-
08-06-2019 - |
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
?
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.