Cómo hacer cuentas de usuario de subdominio en una aplicación web

votos
21

Estoy buscando permitir a los usuarios controlar el subdominio de una aplicación con la que estoy jugando, al igual que Basecamp, donde está customusername.seework.com.

Lo que se requiere al DNSfinal para permitir que estos se creen dinámicamente y estén disponibles al instante.

¿Y cómo recomiendas lidiar con esto en la lógica del sitio? Htaccessregla para buscar el subdominio en el DB?

Publicado el 04/08/2008 a las 13:22
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
13

La forma en que hacemos esto es tener un 'catch all' para nuestro nombre de dominio registrado en DNS para que anything.ourdomain.com apunte a nuestro servidor.

Con Apache puede configurar un catch-all similar para sus fantasmas. El ServerName debe ser un único nombre estático, pero la directiva ServerAlias ​​puede contener un patrón.

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

Ahora todos los dominios activarán el vhost para nuestro proyecto. La parte final es decodificar el nombre de dominio realmente utilizado para que pueda encontrar el nombre de usuario en su código, algo así como (PHP):

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

o una RewriteRule como ya se sugirió, que mapea silenciosamente user.ourdomain.com/foo/bar a www.ourdomain.com/foo/bar?user=user o lo que prefiera.

Respondida el 04/08/2008 a las 14:39
fuente por usuario

votos
8

No se preocupe por la reescritura de DNS y URL

Su registro DNS será estático, algo así como:

*.YOURDOMAIN.COM A 123.123.123.123

Pídale a su proveedor de DNS que lo haga por usted (si aún no lo hizo) o hágalo usted mismo si tiene control sobre sus registros de DNS. Esto apuntará automáticamente todos sus subdominios (actuales y futuros) al mismo servidor HTTP.

Una vez hecho, solo tendrá que analizar el encabezado HOST en cada solicitud HTTP para detectar qué nombre de host se utilizó para acceder a las secuencias de comandos del servidor en su servidor http.

Asumiendo que estás usando ASP.NET, este es un ejemplo tonto, pero funcionó y demuestra la simplicidad de este enfoque:

<%@ 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");
%>
Respondida el 04/08/2008 a las 13:32
fuente por usuario

votos
2

El truco para eso es usar la reescritura de URL para que name.domain.com se asigne de forma transparente a algo como domain.com/users/name en tu servidor. Una vez que empiezas por ese camino, es bastante trivial de implementar.

Respondida el 04/08/2008 a las 13:28
fuente por usuario

votos
0

Estaba buscando hacer algo similar ( www.mysite.com/SomeUser).

Lo que hice fue editar 404.shtmlpara incluir este código de inclusión del lado del servidor (SSI):

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

Luego creé el archivo 404.php, donde analicé la URL para verificar el nombre de un usuario y mostré su información de la base de datos.

Respondida el 12/10/2009 a las 16:28
fuente por usuario

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