Как сделать учетные записи субдомена в веб-приложении - PullRequest
22 голосов
/ 04 августа 2008

Я хочу позволить пользователям управлять поддоменом приложения, с которым я играю, во многом как Basecamp, где он customusername.seework.com.

Что требуется на конце DNS для динамического создания и мгновенного доступа к ним.

А как вы рекомендуете заниматься этим в логике сайта? Htaccess правило для поиска поддоменов в DB?

Ответы [ 4 ]

14 голосов
/ 04 августа 2008

То, как мы это делаем, заключается в том, чтобы «зарегистрировать все» для нашего доменного имени, зарегистрированного в DNS, чтобы any.ourdomain.com указывал на наш сервер.

С помощью Apache вы можете настроить аналогичное универсальное решение для ваших vhosts. Имя_сервера должно быть одним статическим именем, но директива ServerAlias ​​может содержать шаблон.

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

Теперь все домены будут запускать vhost для нашего проекта. Последняя часть заключается в декодировании фактически используемого имени домена, чтобы вы могли определить имя пользователя в своем коде, например, (PHP):

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

или RewriteRule, как уже было предложено, который автоматически сопоставляет user.ourdomain.com/foo/bar с www.ourdomain.com/foo/bar?user=user или с любым другим.

8 голосов
/ 04 августа 2008

Не беспокойтесь о перезаписи DNS и URL

Ваша DNS-запись будет статической, что-то вроде:

*.YOURDOMAIN.COM A 123.123.123.123

Попросите вашего DNS-провайдера сделать это за вас (если это еще не сделано) или сделать это самостоятельно, если у вас есть контроль над записями DNS. Это автоматически направит все ваши субдомены (текущие и будущие) на один и тот же HTTP-сервер.

Как только это будет сделано, вам нужно будет только анализировать заголовок HOST при каждом запросе http, чтобы определить, какое имя хоста использовалось для доступа к вашим серверным сценариям на вашем сервере http.

Предполагается, что вы используете ASP.NET, это глупый пример, который я привел, но он работает и демонстрирует простоту этого подхода:

<%@ 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");
%>
2 голосов
/ 04 августа 2008

Хитрость заключается в том, чтобы использовать перезапись URL, чтобы name.domain.com прозрачно отображалось на что-то вроде domain.com / users / name на вашем сервере. Как только вы начнете идти по этому пути, это будет довольно просто реализовать.

0 голосов
/ 12 октября 2009

Я хотел сделать что-то подобное (www.mysite.com/SomeUser).

Я отредактировал 404.shtml, добавив код включения (SSI) на стороне сервера:

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

Затем я создал файл 404.php, где я проанализировал URL-адрес, чтобы проверить имя пользователя и показал его информацию из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...