4 ответа

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

  2. Не беспокойтесь о перезаписи DNS и URL

    Ваша DNS-запись будет статической, что-то вроде:

    *.YOURDOMAIN.COM A 123.123.123.123
    

    Попросите вашего DNS-провайдера сделать это за вас (если это еще не сделано) или сделать это самостоятельно, если у вас есть контроль над вашими записями DNS. Это автоматически приведет к тому, что все ваши поддомены (текущие и будущие) окажутся на одном HTTP-сервере.

    Как только это будет сделано, вам нужно будет только проанализировать заголовок хоста на каждом 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");
    %>
    
  3. Способ, которым мы делаем это, должен иметь ‘catch all’ для нашего доменного имени, зарегистрированного в DNS, чтобы anything.ourdomain.com укажет на наш сервер.

    С Apache вы можете настроить аналогичный catch-all для ваших vhosts. Имя_сервера должно быть одно статическое имя, но директива ServerAlias может содержать шаблон.

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

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

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

    или переписчик, как уже предлагалось, что молча карты user.ourdomain.com/foo/bar к http://www.ourdomain.com/foo/bar?user=user или как вы предпочитаете.

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

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

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

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