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

StackOverflow https://stackoverflow.com/questions/1180

Вопрос

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

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

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

Это было полезно?

Решение

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

С помощью Apache вы можете настроить аналогичный комплексный подход для своих виртуальных хостов.Имя_сервера должно быть одним статическим именем, но директива 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-адресов, чтобы имя.домен.com прозрачно сопоставляется с чем-то вроде домен.com/пользователи/имя на вашем сервере.Как только вы начнете идти по этому пути, реализовать его будет довольно просто.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top