Symfony 4 Динамическая маршрутизация поддоменов и конфигурация Nginx

Я хочу обрабатывать динамический поддомен в моем приложении Symfony 4.

Я ищу такую ​​конфигурацию:

  • store1.domain.com => StoreController :: индекс
  • store2.domain.com => StoreController :: индекс
  • www.domain.com => HomeController :: homePage
  • domain.com => HomeController :: homePage и т. д. и т. д.

Я пробую этот код, но не работает. Всегда совпадает с HomeController. StoreController никогда не соответствует.

И когда я пробую эту конфигурацию, запрос "domain.com" показывает мне "Добро пожаловать в nginx!" страница.

class StoreController extends AbstractController
{
    /**
     * @Route("/", name = "store_home", host = "{store_name}.domain.test")
     */
    public function storeHomepage()
    {
        return $this->render('store/index.html.twig');
    }
}

class HomeController extends AbstractController
{
    /**
     * @Route("/", name = "site_home")
     */
    public function homePage()
    {
        return $this->render('site/home/index.html.twig');
    }
}

А вот моя конфигурация nginx:

server {
    listen       80;
    server_name  *.domain.test;
    root       /site/root/public;

    location config bla bla bla;
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
994
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

I'm trying this code but is not working. Its always match with HomeController. StoreController never matching.

Вы используете маршрутизацию аннотаций, поэтому маршруты загружаются в алфавитном порядке.

Сначала будет протестирован ваш домашний контроллер, и он будет соответствовать, потому что вы не наложили на него никаких ограничений.

Попробуйте явно указать хост.

class HomeController extends AbstractController
{
    /**
     * @Route("/", name = "site_home", host = "domain.test")
     */
    public function homePage()
    {
        return $this->render('site/home/index.html.twig');
    }
}

And when I try this configuration "domain.com" request show to me "Welcome to nginx!" page.

Я не совсем специалист по nginx, но считаю, что server_name *.domain.test; означает все поддомены, но исключает основной домен. Попробуйте как server_name .domain.test;

Работает на меня. Спасибо.

rgn 17.11.2018 10:44

В конфигурации NGINX вы можете указать несколько server_name, например: имя_сервера example.org www.example.org;

Это должно сработать для вас:

server {
    listen       80;
    server_name  *.domain.test domain.test;
    root       /site/root/public;

    location config bla bla bla;
}

http://nginx.org/en/docs/http/server_names.html

Другие вопросы по теме