Question

Je cherche à permettre aux utilisateurs de contrôler le sous-domaine d'une application avec laquelle je joue, un peu comme Basecamp où il se trouve customusername.seework.com.

Ce qui est requis sur le DNS fin pour permettre à ceux-ci d’être créés dynamiquement et d’ê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?

Était-ce utile?

La solution

La façon dont nous procédons est d'avoir un « fourre-tout » pour notre nom de domaine enregistré dans DNS afin que any.ourdomain.com pointe vers notre serveur.

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

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

Désormais, tous les domaines déclencheront le vhost de notre projet.La dernière partie consiste à décoder le nom de domaine réellement utilisé afin que vous puissiez trouver le nom d'utilisateur dans votre code, quelque chose comme (PHP) :

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

ou un RewriteRule comme déjà suggéré qui mappe silencieusement user.ourdomain.com/foo/bar à www.ourdomain.com/foo/bar?user=user ou ce que vous préférez.

Autres conseils

Ne vous inquiétez pas de la réécriture DNS et URL

Votre enregistrement DNS sera statique, quelque chose comme :

*.YOURDOMAIN.COM A 123.123.123.123

Demandez à votre fournisseur DNS de le faire pour vous (si ce n'est pas déjà fait) ou faites-le vous-même si vous contrôlez vos enregistrements DNS.Cela pointera automatiquement tous vos sous-domaines (actuels et futurs) vers le même serveur HTTP.

Une fois cela fait, il vous suffira d'analyser l'en-tête HOST de 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, c'est un exemple un peu idiot que j'ai proposé, mais qui fonctionne 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");
%>

L'astuce consiste à utiliser la réécriture d'URL afin que nom.domaine.com correspond de manière transparente à quelque chose comme domaine.com/utilisateurs/nom sur votre serveur.Une fois que vous avez commencé dans cette voie, c'est assez simple à mettre en œuvre.

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

Ce que j'ai fait, c'est que j'ai édité 404.shtml pour inclure ce code d'inclusion (SSI) côté serveur :

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

Puis j'ai créé le fichier 404.php, où j'ai analysé l'URL pour vérifier le nom d'un utilisateur et affiché ses informations à partir de la base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top