Pregunta

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

¿Qué se requiere en el DNS final para permitir que se creen dinámicamente y estén disponibles al instante.

¿Y cómo recomienda abordar esto en la lógica del sitio? Htaccess regla para buscar el subdominio en el DB?

¿Fue útil?

Solución

La forma en que hacemos esto es tener un 'captura general' para nuestro nombre de dominio registrado en DNS para que cualquier cosa.nuestrodominio.com apunte a nuestro servidor.

Con Apache puedes configurar un sistema general similar para tus vhosts.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 puedas calcular el nombre de usuario en tu código, algo así como (PHP):

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

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

Otros consejos

No te preocupes 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 ha hecho) o hágalo usted mismo si tiene control sobre sus registros DNS.Esto apuntará automáticamente todos sus subdominios (actuales y futuros) al mismo servidor HTTP.

Una vez hecho esto, solo necesitará analizar el encabezado HOST en cada solicitud http para detectar qué nombre de host se usó para acceder a los scripts del lado del servidor en su servidor http.

Suponiendo que esté utilizando ASP.NET, este es un ejemplo un poco tonto que se me ocurrió, pero funciona 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");
%>

El truco para ello es utilizar la reescritura de URL para que nombre.dominio.com se asigna de forma transparente a algo como dominio.com/usuarios/nombre en su servidor.Una vez que comienzas a recorrer ese camino, su implementación es bastante trivial.

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

Lo que hice fue editar 404.shtml para 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top