Jak utworzyć konta użytkowników subdomeny w aplikacji webapp

Chcę umożliwić użytkownikom kontrolę nad subdomeną aplikacji, z którą się bawię, podobnie jak Basecamp, gdzie jest customusername.seework.com.

Co jest wymagane na końcu DNS, aby umożliwić ich dynamiczne tworzenie i natychmiastowe udostępnianie.

A jak radzisz sobie z tym w logice strony? Htaccess reguła wyszukiwania subdomeny w DB?

Author: niton, 2008-08-04

4 answers

Sposobem, w jaki to robimy, jest posiadanie "catch all" dla naszej nazwy domeny zarejestrowanej w DNS, aby anything.ourdomain.com wskaże nasz serwer.

Z Apache możesz skonfigurować podobny catch-all dla swoich vhostów. Nazwa serwera musi być pojedynczą nazwą statyczną, ale dyrektywa ServerAlias może zawierać wzorzec.

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

Teraz wszystkie domeny uruchomią vhost dla naszego projektu. Ostatnią częścią jest dekodowanie faktycznie używanej nazwy domeny, aby można było ustalić nazwę użytkownika w Twoim kodzie coś w stylu (PHP):

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

Lub Rewriter jak już sugerowano, że po cichu mapuje user.ourdomain.com/foo/bar na www.ourdomain.com/foo/bar?user=user czy jak wolisz.

 13
Author: Mat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-07 00:39:09

Nie martw się o przepisywanie DNS i URL

Twój rekord DNS będzie statyczny, coś w stylu:

*.YOURDOMAIN.COM A 123.123.123.123

Poproś swojego dostawcę DNS, aby zrobił to za Ciebie (jeśli jeszcze tego nie zrobiłeś) lub zrób to sam, jeśli masz kontrolę nad rekordami DNS. Spowoduje to automatyczne skierowanie wszystkich subdomen (obecnych i przyszłych) na ten sam serwer HTTP.

Gdy to zrobisz, będziesz musiał tylko przeanalizować nagłówek hosta na każdym pojedynczym żądaniu http, aby wykryć, do której nazwy hosta użyto dostęp do skryptów po stronie serwera na serwerze http.

Zakładając, że używasz ASP.NET, to jest trochę głupi przykład, który wymyśliłem, ale działa i demonstruje prostotę tego podejścia:

<%@ 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
Author: lubos hasko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-04 13:34:55

Sztuką jest użycie przepisywania URL tak, aby name.domain.com przejrzyście odwzorowuje coś w rodzaju domain.com/users/name na twoim serwerze. Po rozpoczęciu tej ścieżki jest to dość trywialne do wdrożenia.

 2
Author: Dave Ward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-04 12:28:03

Chciałem zrobić coś podobnego (www.mysite.com/SomeUser).

To co zrobiłem to edytowałem 404.shtml aby dołączyć ten kod po stronie serwera include (SSI):

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

Następnie utworzyłem plik 404.php, w którym analizowałem adres URL, aby sprawdzić nazwę użytkownika i pokazałem jego informacje z bazy danych.

 0
Author: Jamie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-09 17:50:59