За последние 24 часа нас посетили 113136 программистов и 6450 роботов. Сейчас ищет 1421 программист ...

Поддомены для пользователей

Тема в разделе "PHP для новичков", создана пользователем Assassin-3009, 14 авг 2018.

  1. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Например, нужно чтобы пользователь (с никнеймом user) моего сайта site.ru мог создать себе страницу с доменом user.site.ru, а другие пользователи могли также переходить по разделам user.site.ru/page1/, user.site.ru/page2/ и т.д.

    Локальный веб-сервер: Open Server Panel
    Могу ли обойтись одним лишь .htaccess?
    Если нет, то что и в каких файлах нужно добавить?
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Повесьте обработку таких запросов на дефолный вирт. хост или на хост с именем *.site.ru, ну и wildcard-запись пропишите у домена.
     
  4. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Куда именно теперь вставить этот кусок кода?
    Код (Text):
    1. server {
    2.      server_name  www.site.ru;
    3.      location / {
    4.          proxy_pass 11.22.33.44:8080;
    5.      }
    6. }
    7.  
    8. server {
    9.      server_name  ~^(?<user>[a-z0-9\-]+)\.site.ru$;
    10.      location / {
    11.          proxy_pass 11.22.33.44:8080/users/$user$uri$is_args$args;
    12.      }
    13. }
    Я прикрепил свой файл nginx (формат txt - чтобы можно было загрузить сюда). Можете, пожалуйста, написать код полный или скинуть обратно этот файлик с уже вставленным кодом?
     

    Вложения:

  5. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Как это всё сделать? Или как, хотя бы, это загуглить?
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Можно же проще сделать.
    server_name *.example.org;
    Перенаправлять все запросы на index.php, а там разбирать $_SERVER['SERVER_NAME']. Кстати, современные фреймворки умеют роутинг на поддоменах из коробки
     
  7. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Так host ведь не поддерживает записи со звездочками. Или поддерживает? Или в open server есть что то еще?
     
  8. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Вот пример:
    сервис https://www.akens.ru/ где пользователь может создать магазин, у которого будет такая ссылка с поддоменом http://vse-kuponi.akens.ru/
     
  9. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Assassin-3009 ты понимаешь разницу между host файлом и dns?
    --- Добавлено ---
    Домены у тебя на пк работают через c:\Windows\System32\Drivers\etc\hosts тебе нужно туда записать все subdomains когда перенесешь на реальный сервер сможешь создавать их автоматически добавив запись в dns.
     
  10. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Нет, даже не знаю где они находятся
     
  11. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    host файл это список доменов и их соответствий ip адресам (локальный для твоего пк). dns практически тоже самое но в глобальном масштабе для всего интернета
     
  12. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Если имеется в виду c:\windows\system32\drivers\etc\hosts , то вот такие записи в нём
    Код (Text):
    1. 127.0.0.1 site.ru
    2. 127.0.0.1 user.site.ru
    3. 127.0.0.1 localhost
     
  13. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    127.0.0.1 user1.site.ru
    127.0.0.1 user2.site.ru
    ....
    127.0.0.1 user100.site.ru
    А дальше уже настраиваешь nginx
     
  14. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Что значит "настраиваешь nginx"?
    --- Добавлено ---
    Вот одна из строк в .htaccess чтобы site.ru/users/user/ было равноценно site.ru/users/index.php?username=user
    Код (Text):
    1. RewriteRule ^users/([a-zA-Z0-9\-\_]+)/$ users/index.php?username=$1
    Нельзя как-то таким же простым способом для поддоменов?
     
  15. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Код (Text):
    1.      server_name  ~^(?<user>[a-z0-9\-]+)\.site.ru$; // user1.site.ru?hello=name
    2.      location / {
    3.          proxy_pass site.ru/users/$user$uri$is_args$args; // site.ru/users/user1?hello=name
    4.      }
     
  16. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Теперь для хватания никнейма юзера из домена пользоваться?
    Код (Text):
    1. <?
    2. if(substr_count($_SERVER['SERVER_NAME'],'.') == 2)
    3. {
    4. $user= $_SERVER['SERVER_NAME'];
    5. $user= explode(".", $user);
    6. $user= $user[0];
    7. }
    8. ?>
     
  17. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Assassin-3009 Не совсем понимаю твой вопрос.
    У тебя сейчас есть ссылка. https://site.ru/users/alex?hello=name
    Ты хочешь сделать с нее https://alex.site.ru?hello=name
    Пишешь в host
    127.0.0.1 alex.site.ru
    Дабвляешь правило в nginx
    И при обращении к https://alex.site.ru?hello=name nginx будет отдавать данные с https://site.ru/users/alex?hello=name
    Все просто.
    --- Добавлено ---
    Если у тебя не так значит что то не сработало.
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    не надо поддомены
    --- Добавлено ---
    не надо поддомены, но для хватания надо парсит $_SERVER['REQUEST_URI'] через parse_url()
     
    marsik нравится это.
  19. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    У меня же на хостинге не будет доступа к файлам hosts и nginx. Да и это не автоматизировано получается.

    Я вижу тут два варианта при создании нового пользователя:
    1. Чтобы в папке users появлялась новая директория и/или файлик.php с названием, имеющим имя этого пользователя.
    2. Без создания новых файлов и директорий. А данные будут браться из БД по имени пользователя, указанном в поддомене.
     
  20. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Ладно, как я понял, файл Nginx-1.12_vhost.conf должен лежать в папке с доменом.
     
  21. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    Что?
     
  22. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Assassin-3009
    Нет. На сервере тебе ничего постоянно править не придется. Добавишь в dns A *.site.com IP
    и укажешь или proxy_pass в nginx или ServerAlias *.website.com в httpd вот если через апатч там уже придется парсить
     
  23. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    По данному источнику составил этот код.
    Куда в файле nginx его вставить?
    Код (Text):
    1.     listen 80;
    2.     server_name site.ru *.site.ru;
    3.     root /var/www/site.ru/$subdomain;
    4.     set $subdomain "";
    5.     if ($host ~* ^([a-z0-9-\.]+)\.site.ru$) {
    6.         set $subdomain $1;
    7.     }
    8.     if ($host ~* ^www.site.ru$) {
    9.         set $subdomain "";
    10.     }

    файл Nginx-1.12_vhost.conf
    Код (Text):
    1. #-----------------------------------------------#
    2. # Начало блока конфигурации хоста
    3. #-----------------------------------------------#
    4.  
    5. server {
    6.     listen         %ip%:%httpport%;
    7.     listen         %ip%:%httpsport% ssl;
    8.     server_name    %host% %aliases%;
    9.  
    10.     ssl_certificate               "%sprogdir%/userdata/config/cert_files/server.crt";
    11.     ssl_certificate_key           "%sprogdir%/userdata/config/cert_files/server.key";
    12.  
    13.     #add_header Strict-Transport-Security "max-age=94608000";
    14.  
    15.     # if ($request_method !~* ^(GET|HEAD|POST)$ ){return 403;}
    16.     location ~ /\. {deny all;}
    17.  
    18.     location / {
    19.         root       "%hostdir%";
    20.         index      index.php index.html index.htm;
    21.     }
    22.  
    23.     location ~ \.php$ {
    24.         root                               "%hostdir%";
    25.         try_files                          $uri =404;
    26.         # if (!-e $document_root$document_uri){return 404;}
    27.         fastcgi_pass                       backend;
    28.         fastcgi_index                      index.php;
    29.         fastcgi_buffers                    4 64k;
    30.         fastcgi_connect_timeout            1s;
    31.         fastcgi_ignore_client_abort        off;
    32.         fastcgi_next_upstream              timeout;
    33.         fastcgi_read_timeout               5m;
    34.         fastcgi_send_timeout               5m;
    35.         fastcgi_param    CONTENT_TYPE      $content_type;
    36.         fastcgi_param    CONTENT_LENGTH    $content_length;
    37.         fastcgi_param    DOCUMENT_URI      $document_uri;
    38.         fastcgi_param    DOCUMENT_ROOT     $document_root;
    39.         fastcgi_param    GATEWAY_INTERFACE CGI/1.1;
    40.         fastcgi_param    HTTPS             $https;
    41.         fastcgi_param    QUERY_STRING      $query_string;
    42.         fastcgi_param    REQUEST_METHOD    $request_method;
    43.         fastcgi_param    REQUEST_URI       $request_uri;
    44.         fastcgi_param    REMOTE_ADDR       $remote_addr;
    45.         fastcgi_param    REMOTE_PORT       $remote_port;
    46.         fastcgi_param    SERVER_ADDR       $server_addr;
    47.         fastcgi_param    SERVER_PORT       $server_port;
    48.         fastcgi_param    SERVER_NAME       $host;
    49.         fastcgi_param    SERVER_PROTOCOL   $server_protocol;
    50.         fastcgi_param    SERVER_SOFTWARE   nginx;
    51.         fastcgi_param    SCRIPT_FILENAME   $document_root$fastcgi_script_name;
    52.         fastcgi_param    SCRIPT_NAME       $fastcgi_script_name;
    53.         fastcgi_param    TMP               "%sprogdir%/userdata/temp";
    54.         fastcgi_param    TMPDIR            "%sprogdir%/userdata/temp";
    55.         fastcgi_param    TEMP              "%sprogdir%/userdata/temp";
    56.     }
    57.  
    58.     # Подключение веб-инструментов
    59.     #---------------------------------------#
    60.     # <Не изменяйте этот блок конфигурации>
    61.     location /openserver/ {
    62.         root     "%sprogdir%/modules/system/html";
    63.         index    index.php;
    64.         %allow%allow    all;
    65.         allow    127.0.0.0/8;
    66.         allow    ::1/128;
    67.         allow    %ips%;
    68.         deny     all;
    69.         location /openserver/server-status {
    70.             stub_status on;
    71.         }
    72.         location ~ ^/openserver/.*\.php$ {
    73.             root                               "%sprogdir%/modules/system/html";
    74.             fastcgi_pass                       backend;
    75.             fastcgi_index                      index.php;
    76.             fastcgi_buffers                    4 64k;
    77.             fastcgi_connect_timeout            1s;
    78.             fastcgi_ignore_client_abort        off;
    79.             fastcgi_next_upstream              timeout;
    80.             fastcgi_read_timeout               5m;
    81.             fastcgi_send_timeout               5m;
    82.             fastcgi_param    CONTENT_TYPE      $content_type;
    83.             fastcgi_param    CONTENT_LENGTH    $content_length;
    84.             fastcgi_param    DOCUMENT_URI      $document_uri;
    85.             fastcgi_param    DOCUMENT_ROOT     $document_root;
    86.             fastcgi_param    GATEWAY_INTERFACE CGI/1.1;
    87.             fastcgi_param    HTTPS             $https;
    88.             fastcgi_param    QUERY_STRING      $query_string;
    89.             fastcgi_param    REQUEST_METHOD    $request_method;
    90.             fastcgi_param    REQUEST_URI       $request_uri;
    91.             fastcgi_param    REMOTE_ADDR       $remote_addr;
    92.             fastcgi_param    REMOTE_PORT       $remote_port;
    93.             fastcgi_param    SERVER_ADDR       $server_addr;
    94.             fastcgi_param    SERVER_PORT       $server_port;
    95.             fastcgi_param    SERVER_NAME       $host;
    96.             fastcgi_param    SERVER_PROTOCOL   $server_protocol;
    97.             fastcgi_param    SERVER_SOFTWARE   nginx;
    98.             fastcgi_param    SCRIPT_FILENAME   $document_root$fastcgi_script_name;
    99.             fastcgi_param    SCRIPT_NAME       $fastcgi_script_name;
    100.             fastcgi_param    TMP               "%sprogdir%/userdata/temp";
    101.             fastcgi_param    TMPDIR            "%sprogdir%/userdata/temp";
    102.             fastcgi_param    TEMP              "%sprogdir%/userdata/temp";
    103.         }
    104.     }
    105.     # <Не изменяйте этот блок конфигурации/>
    106.     #---------------------------------------#
    107. }
    108.  
    109. #-----------------------------------------------#
    110. # Конец блока конфигурации хоста
    111. #-----------------------------------------------#

    Напишите, пожалуйста, полный листинг этого файла после редактирования.
     
  24. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
  25. Assassin-3009

    Assassin-3009 Активный пользователь

    С нами с:
    24 май 2016
    Сообщения:
    55
    Симпатии:
    0
    1. Добавил алиас user1.site.ru -> site.ru
    2. Подключил модуль Bind-9.10
    3. Закинул файл Bind-9.10_zone.conf в папку сайта
    Код (Text):
    1. $ORIGIN %domain%.    ; default zone domain
    2. $TTL %ttl%           ; default time to live
    3. @ IN SOA ns1.%domain%. hostmaster.%domain%. (
    4.            %serial%  ; serial number
    5.            %ttl%     ; Refresh
    6.            60        ; Retry
    7.            1209600   ; Expire
    8.            %ttl%     ; Min TTL
    9.            )
    10.  
    11. %domain%.   %ttl%  IN   NS    ns1.%domain%.
    12. %domain%.   %ttl%  IN   A     %ip%
    13. ns1         %ttl%  IN   A     %ip%

    Домен user1.site.ru теперь работает.
    А вот файл Bind-9.10 надо как-то корректировать ещё?