Как сделать учетные записи поддоменов в веб-приложении
Я хочу, чтобы пользователи могли контролировать поддомен приложения, с которым я играю, так же, как Basecamp, где он находится. customusername.seework.com
,
Что требуется на DNS
конец, чтобы позволить им быть созданы динамически и быть доступными мгновенно.
И как вы рекомендуете заниматься этим в логике сайта? Htaccess
Правило поиска поддомен в DB
?
4 ответа
Для этого мы должны зарегистрировать доменное имя "все" для DNS, чтобы что-нибудь по-вашему.
С помощью 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 или с любым другим вариантом.
Не беспокойтесь о перезаписи 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");
%>
Хитрость заключается в том, чтобы использовать переписывание URL, чтобы name.domain.com прозрачно отображал что-то вроде domain.com/users/name на вашем сервере. Как только вы начнете идти по этому пути, это будет довольно просто реализовать.
Я искал что-то похожее (www.mysite.com/SomeUser
).
Что я сделал, я отредактировал 404.shtml
включить этот код включения на стороне сервера (SSI):
<!--#include virtual="404.php" -- >
Затем я создал файл 404.php
где я проанализировал URL, чтобы проверить имя пользователя и показал его информацию из базы данных.