web-applications - gratis - godaddy
Cómo hacer cuentas de usuario de subdominio en una aplicación web (4)
Estoy buscando permitir a los usuarios controlar el subdominio de una aplicación con la que estoy jugando, al igual que Basecamp, donde es customusername.seework.com
.
Lo que se requiere en el extremo DNS
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? Htaccess
Regla de Htaccess
para buscar el subdominio en el DB
?
El truco para eso es utilizar 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.
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");
%>
Estaba buscando hacer algo similar ( www.mysite.com/SomeUser
).
Lo que hice fue editar 404.shtml
para incluir este 404.shtml
de inclusión del lado del servidor (SSI):
<!--#include virtual="404.php" -- >
Luego creé el archivo 404.php
, donde 404.php
la URL para verificar el nombre de un usuario y mostré su información de la base de datos.
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.