Сведения о вопросе

LiKIY

16:03, 1st July, 2020

Теги

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

Просмотров: 434   Ответов: 4

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

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

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



  Сведения об ответе

JUST___

18:03, 1st July, 2020

Мы делаем это таким образом, чтобы иметь 'catch all' для нашего доменного имени, зарегистрированного в DNS, так что anything.ourdomain.com будет указывать на наш сервер.

С помощью Apache вы можете настроить аналогичную функцию catch-all для ваших vhosts. ServerName должно быть единственным статическим именем, но директива 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?пользователь=пользователь или что вы предпочитаете.


  Сведения об ответе

screen

18:03, 1st July, 2020

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


  Сведения об ответе

ASSembler

18:03, 1st July, 2020

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


  Сведения об ответе

PHPH

18:03, 1st July, 2020

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

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться