Например, нужно чтобы пользователь (с никнеймом user) моего сайта site.ru мог создать себе страницу с доменом user.site.ru, а другие пользователи могли также переходить по разделам user.site.ru/page1/, user.site.ru/page2/ и т.д. Локальный веб-сервер: Open Server Panel Могу ли обойтись одним лишь .htaccess? Если нет, то что и в каких файлах нужно добавить?
Повесьте обработку таких запросов на дефолный вирт. хост или на хост с именем *.site.ru, ну и wildcard-запись пропишите у домена.
Куда именно теперь вставить этот кусок кода? Код (Text): server { server_name www.site.ru; location / { proxy_pass 11.22.33.44:8080; } } server { server_name ~^(?<user>[a-z0-9\-]+)\.site.ru$; location / { proxy_pass 11.22.33.44:8080/users/$user$uri$is_args$args; } } Я прикрепил свой файл nginx (формат txt - чтобы можно было загрузить сюда). Можете, пожалуйста, написать код полный или скинуть обратно этот файлик с уже вставленным кодом?
Можно же проще сделать. server_name *.example.org; Перенаправлять все запросы на index.php, а там разбирать $_SERVER['SERVER_NAME']. Кстати, современные фреймворки умеют роутинг на поддоменах из коробки
Так host ведь не поддерживает записи со звездочками. Или поддерживает? Или в open server есть что то еще?
Вот пример: сервис https://www.akens.ru/ где пользователь может создать магазин, у которого будет такая ссылка с поддоменом http://vse-kuponi.akens.ru/
@Assassin-3009 ты понимаешь разницу между host файлом и dns? --- Добавлено --- Домены у тебя на пк работают через c:\Windows\System32\Drivers\etc\hosts тебе нужно туда записать все subdomains когда перенесешь на реальный сервер сможешь создавать их автоматически добавив запись в dns.
host файл это список доменов и их соответствий ip адресам (локальный для твоего пк). dns практически тоже самое но в глобальном масштабе для всего интернета
Если имеется в виду c:\windows\system32\drivers\etc\hosts , то вот такие записи в нём Код (Text): 127.0.0.1 site.ru 127.0.0.1 user.site.ru 127.0.0.1 localhost
127.0.0.1 user1.site.ru 127.0.0.1 user2.site.ru .... 127.0.0.1 user100.site.ru А дальше уже настраиваешь nginx
Что значит "настраиваешь nginx"? --- Добавлено --- Вот одна из строк в .htaccess чтобы site.ru/users/user/ было равноценно site.ru/users/index.php?username=user Код (Text): RewriteRule ^users/([a-zA-Z0-9\-\_]+)/$ users/index.php?username=$1 Нельзя как-то таким же простым способом для поддоменов?
Код (Text): server_name ~^(?<user>[a-z0-9\-]+)\.site.ru$; // user1.site.ru?hello=name location / { proxy_pass site.ru/users/$user$uri$is_args$args; // site.ru/users/user1?hello=name }
Теперь для хватания никнейма юзера из домена пользоваться? Код (Text): <? if(substr_count($_SERVER['SERVER_NAME'],'.') == 2) { $user= $_SERVER['SERVER_NAME']; $user= explode(".", $user); $user= $user[0]; } ?>
@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 Все просто. --- Добавлено --- Если у тебя не так значит что то не сработало.
не надо поддомены --- Добавлено --- не надо поддомены, но для хватания надо парсит $_SERVER['REQUEST_URI'] через parse_url()
У меня же на хостинге не будет доступа к файлам hosts и nginx. Да и это не автоматизировано получается. Я вижу тут два варианта при создании нового пользователя: 1. Чтобы в папке users появлялась новая директория и/или файлик.php с названием, имеющим имя этого пользователя. 2. Без создания новых файлов и директорий. А данные будут браться из БД по имени пользователя, указанном в поддомене.
@Assassin-3009 Нет. На сервере тебе ничего постоянно править не придется. Добавишь в dns A *.site.com IP и укажешь или proxy_pass в nginx или ServerAlias *.website.com в httpd вот если через апатч там уже придется парсить
По данному источнику составил этот код. Куда в файле nginx его вставить? Код (Text): listen 80; server_name site.ru *.site.ru; root /var/www/site.ru/$subdomain; set $subdomain ""; if ($host ~* ^([a-z0-9-\.]+)\.site.ru$) { set $subdomain $1; } if ($host ~* ^www.site.ru$) { set $subdomain ""; } файл Nginx-1.12_vhost.conf Код (Text): #-----------------------------------------------# # Начало блока конфигурации хоста #-----------------------------------------------# server { listen %ip%:%httpport%; listen %ip%:%httpsport% ssl; server_name %host% %aliases%; ssl_certificate "%sprogdir%/userdata/config/cert_files/server.crt"; ssl_certificate_key "%sprogdir%/userdata/config/cert_files/server.key"; #add_header Strict-Transport-Security "max-age=94608000"; # if ($request_method !~* ^(GET|HEAD|POST)$ ){return 403;} location ~ /\. {deny all;} location / { root "%hostdir%"; index index.php index.html index.htm; } location ~ \.php$ { root "%hostdir%"; try_files $uri =404; # if (!-e $document_root$document_uri){return 404;} fastcgi_pass backend; fastcgi_index index.php; fastcgi_buffers 4 64k; fastcgi_connect_timeout 1s; fastcgi_ignore_client_abort off; fastcgi_next_upstream timeout; fastcgi_read_timeout 5m; fastcgi_send_timeout 5m; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param HTTPS $https; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param REQUEST_URI $request_uri; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $host; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param TMP "%sprogdir%/userdata/temp"; fastcgi_param TMPDIR "%sprogdir%/userdata/temp"; fastcgi_param TEMP "%sprogdir%/userdata/temp"; } # Подключение веб-инструментов #---------------------------------------# # <Не изменяйте этот блок конфигурации> location /openserver/ { root "%sprogdir%/modules/system/html"; index index.php; %allow%allow all; allow 127.0.0.0/8; allow ::1/128; allow %ips%; deny all; location /openserver/server-status { stub_status on; } location ~ ^/openserver/.*\.php$ { root "%sprogdir%/modules/system/html"; fastcgi_pass backend; fastcgi_index index.php; fastcgi_buffers 4 64k; fastcgi_connect_timeout 1s; fastcgi_ignore_client_abort off; fastcgi_next_upstream timeout; fastcgi_read_timeout 5m; fastcgi_send_timeout 5m; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param HTTPS $https; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param REQUEST_URI $request_uri; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $host; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param TMP "%sprogdir%/userdata/temp"; fastcgi_param TMPDIR "%sprogdir%/userdata/temp"; fastcgi_param TEMP "%sprogdir%/userdata/temp"; } } # <Не изменяйте этот блок конфигурации/> #---------------------------------------# } #-----------------------------------------------# # Конец блока конфигурации хоста #-----------------------------------------------# Напишите, пожалуйста, полный листинг этого файла после редактирования.
Оказывается у вас там есть и куда субдомены вбивать и bind https://ospanel.io/forum/viewtopic.php?f=3&t=488
1. Добавил алиас user1.site.ru -> site.ru 2. Подключил модуль Bind-9.10 3. Закинул файл Bind-9.10_zone.conf в папку сайта Код (Text): $ORIGIN %domain%. ; default zone domain $TTL %ttl% ; default time to live @ IN SOA ns1.%domain%. hostmaster.%domain%. ( %serial% ; serial number %ttl% ; Refresh 60 ; Retry 1209600 ; Expire %ttl% ; Min TTL ) %domain%. %ttl% IN NS ns1.%domain%. %domain%. %ttl% IN A %ip% ns1 %ttl% IN A %ip% Домен user1.site.ru теперь работает. А вот файл Bind-9.10 надо как-то корректировать ещё?