Как автоматически создать поддомен в Laravel - PullRequest
0 голосов
/ 28 октября 2019

Я создаю приложение SaaS с помощью Laravel и пытаюсь создать поддомен для каждой регистрации пользователя. Например,

  1. Пользователь заходит на www.somewebsite.com и регистрируется
  2. Во время регистрации пользователь сообщает свое фирменное наименование, например, mybiz
  3. Я хочу свое приложение Laravelдинамически создавать динамический поддомен mybiz.somewebsite.com
  4. Каждый раз, когда пользователь входит на сайт, он автоматически перенаправляется на mybiz.somewebsite.com и остается на этом URL-адресе в течение всего сеанса.

Внет, я как администратор хотел бы создать поддомен вручную. Я использую Apache в Ubuntu для установки Laravel.

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Есть много способов сделать это, многое зависит от того, чего вы пытаетесь достичь здесь.

Я предполагаю, что вы не хотите динамически создавать и отдавать реальные имена хостов / поддоменов, поэтому ябудет идти с созданием записи DNS подстановочного знака, указывающей на машину. Одиночная запись, указывающая на IP-адрес, сделает свое дело, просто добавьте звездочку "*" впереди вместо указания имени хоста.

Тогда доменные записи будут выглядеть так:

┌──────────────────────────────┬─────────────┬──────────────────────────────────┐
│    HOSTNAME                  │    TYPE     │    POINT TO                      │
│──────────────────────────────│─────────────│──────────────────────────────────│
│    some-domain.com           │      A      │    SERVER IP ADDRESS             │
│    *.some-domain.com         │      A      │    SERVER IP ADDRESS             │
│    wwww.some-domain.com      │    CNAME    │    some-domain.com               │

Счто вы в основном перенаправляете весь трафик с любого варианта имени хоста на один адрес и позволяете ему управлять им. Подобная запись с подстановочными знаками может быть переопределена только другой более конкретной записью, поэтому она будет идентифицироваться как whatever.some-domain.com и anything.some-domain.com и позволит вам практически полностью управлять ею без необходимости добавления дополнительных записей.

ТеперьВы хотите, чтобы ваш веб-сервер взял на себя управление всеми этими возможными адресами. С помощью Apache вы можете сделать это, добавив в конфигурацию новых виртуальных хостов, сколько захотите и сколько захотите, или вы можете добавить только один общий и перенаправить все в ваше приложение Laravel и позволить ему обрабатывать все самостоятельно. Нечто подобное будет работать:

 <VirtualHost *:80>
   ServerName your-domain.com
   ServerAlias *.your-domain.com
   DocumentRoot /var/www/laravel/app
 </VirtualHost>

На этом этапе вы можете делать все что угодно - поскольку обрабатываете весь трафик, вы можете направлять посетителей на любой поддомен. Вы можете настроить некоторые переменные окружения в Apache, чтобы точно знать, какой поддомен использовался, когда кто-то посещает приложение, или использовать встроенные PHP-программы и читать адрес с глобальными переменными, такими как $_SERVER['HTTP_HOST'].

Я уверен, что Laravel предоставляет более чем достаточно утилит для обработки всего из коробки, но нет необходимости зависеть от фреймворков, обработка трафика может выполняться даже с помощью псевдокода, подобного этому:

<?php
if ($_SERVER['HTTP_HOST'] !== CurrentUser::get_personal_subdomain()) {
  http_response_code(301);
  header('Location: '. Router::random_address());
  exit;
}
0 голосов
/ 28 октября 2019

Сначала создайте субдомен подстановочного знака на вашем сервере, чтобы ваше приложение laravel обрабатывало все запросы субдоменов. Затем создайте глобальное промежуточное программное обеспечение для вашего приложения, которое извлекает поддомен из URL-адреса запроса и обрабатывает его соответствующим образом. Таким образом, https://example.com и https://{username}.example.com обрабатываются вашим приложением, и вы можете делать то, что вы хотите, с {username}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...