2008-08-04 4 views
21

Je cherche à permettre aux utilisateurs de contrôler le sous-domaine d'une application avec laquelle je suis en train de jouer, un peu comme Basecamp où c'est customusername.seework.com.Comment faire des comptes utilisateur de sous-domaine dans une application web

Ce qui est requis sur l'extrémité DNS pour permettre à ceux-ci d'être créés dynamiquement et être disponibles instantanément.

Et comment recommandez-vous de gérer cela dans la logique du site? Htaccess règle pour rechercher le sous-domaine dans le DB?

Répondre

13

La façon dont nous le faisons est d'avoir un « catch all 'pour notre nom de domaine enregistré dans le DNS afin que anything.ourdomain.com pointe vers notre serveur.

Avec Apache, vous pouvez configurer un fourre-tout similaire pour vos hôtes. Le nom de serveur doit être un nom statique unique, mais la directive ServerAlias ​​peut contenir un modèle.

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

Maintenant, tous les domaines vont déclencher le vhost pour notre projet. La dernière partie est de décoder le nom de domaine effectivement utilisé pour que vous puissiez travailler sur le nom d'utilisateur dans votre code, quelque chose comme (PHP):

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

ou RewriteRule comme cela a déjà suggéré que des cartes en silence user.ourdomain.com/foo/bar à www.ourdomain.com/foo/bar?user=user ou ce que vous préférez.

+0

comment installez-vous un fourre-tout similaire sur IIS – Vikram

2

L'astuce pour c'est d'utiliser la réécriture d'URL afin que name.domain.com cartes de manière transparente à quelque chose comme domain.com/users/name sur votre serveur. Une fois que vous démarrez ce chemin, il est assez simple à mettre en œuvre.

+0

Je cherche l'URL pour rester username.domain.com PAS pour rediriger vers domain.com/username – parliament

+1

@parliament: Il n'aurait pas besoin de rediriger, non. La réécriture peut être transparente (par exemple, comment presque chaque site WordPress que vous visitez a des URL conviviales, mais les demandes vont en fait à index.php). –

8

Ne vous préoccupez pas de réécriture DNS et URL

Votre enregistrement DNS sera statique, quelque chose comme:

*.YOURDOMAIN.COM A 123.123.123.123 

Demandez à votre fournisseur de DNS pour le faire pour vous (si elle ne se fait pas déjà) ou faites-le vous-même si vous avez le contrôle sur vos enregistrements DNS. Cela pointera automatiquement tous vos sous-domaines (actuels et futurs) dans le même serveur HTTP. Une fois cela fait, vous n'aurez plus qu'à analyser l'en-tête HOST sur chaque requête http pour détecter quel nom d'hôte a été utilisé pour accéder à vos scripts côté serveur sur votre serveur http.

En supposant que vous utilisez ASP.NET, ce genre d'exemple est stupide je suis venu avec, mais des œuvres et démontre la simplicité de cette approche:

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

Je cherchais à faire quelque chose de similaire (www.mysite.com/SomeUser).

Ce que je ne faisais que j'edited 404.shtml d'inclure ce côté serveur comprennent (SSI) Code:

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

Ensuite, j'ai créé le fichier 404.php, où j'analysables l'URL pour vérifier le nom d'un utilisateur et montré leur info de la base de données. Cela entraînerait-il une redirection et une modification de l'URL dans la barre d'adresse?

Questions connexes