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

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

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

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

4.08.2008 12:22:07
4 ОТВЕТА
РЕШЕНИЕ

Для этого мы должны зарегистрировать доменное имя «все» для DNS, чтобы что угодно .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 или с любым другим вариантом.

14
7.02.2016 00:39:09
как настроить подобный универсальный метод на IIS
Vikram 13.05.2009 10:02:29

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

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

2
4.08.2008 12:28:03
это приведет к перенаправлению и изменению URL в адресной строке? Я ищу URL, чтобы остаться username.domain.com НЕ для перенаправления на domain.com/username
parliament 2.10.2014 14:17:50
@ Парламент: Нет необходимости перенаправлять, нет. Перезапись может быть прозрачной (например, почти все сайты WordPress, которые вы посещаете, имеют удобные URL-адреса, но запросы на самом деле идут в index.php).
Dave Ward 2.10.2014 23:33:04

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

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

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

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

0
9.11.2011 17:50:59