2008-08-04 16 views
21

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

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

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

ответ

13

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

С помощью Apache вы можете создать подобный улов для ваших vhosts. Имя_сервера должно быть единственным статическим именем, но директива ServerAlias ​​может содержать шаблон.

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

Теперь все домены вызовут призрак для нашего проекта. Заключительная часть должна декодировать доменное имя на самом деле используется, так что вы можете работать имя пользователя в вашем коде, что-то вроде (PHP):

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

или RewriteRule, как уже было предложено, что беззвучно карты user.ourdomain.com/foo/bar на www.ourdomain.com/foo/bar?user=user или что вы предпочитаете.

2

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

+0

приведет ли это к перенаправлению и изменению URL-адреса в адресной строке?Я ищу URL-адрес, чтобы оставаться username.domain.com НЕ переадресовывать на domain.com/username – parliament 2014-10-02 14:17:50

+1

@parliament: ему не нужно было перенаправлять, нет. Переписывание может быть прозрачным (например, как почти каждый сайт WordPress, который вы посещаете, имеет дружественные URL-адреса, но запросы на самом деле идут в index.php). – 2014-10-02 23:33:04

8

Не беспокойтесь о 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"); 
%> 
0

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

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

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

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