Как создать учетные записи пользователей поддоменов в веб-приложении

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

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

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

Ответов (4)

Решение

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

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

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

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

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

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

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

Не беспокойтесь о перезаписи 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");
%>

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

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

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

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