Есть много способов сделать это, многое зависит от того, чего вы пытаетесь достичь здесь.
Я предполагаю, что вы не хотите динамически создавать и отдавать реальные имена хостов / поддоменов, поэтому ябудет идти с созданием записи 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;
}