Symfony 4动态子域路由和Nginx配置

时间:2018-11-12 14:35:34

标签: php symfony nginx symfony4

我想在Symfony 4应用程序中处理动态子域。

我正在寻找这样的配置:

  • store1.domain.com => StoreController :: index
  • store2.domain.com => StoreController :: index
  • 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;
}

2 个答案:

答案 0 :(得分:1)

  

我正在尝试此代码,但无法正常工作。它总是与   HomeController。 StoreController永不匹配。

您正在使用注释路由,因此路由是按字母顺序加载的。

您的家庭控制器将首先尝试,并且它将匹配,因为您没有对其施加任何限制。

尝试显式设置主机。

10.0
  

当我尝试此配置时,“ domain.com”请求显示给我   “欢迎使用nginx!”页面。

我并不是真正的Nginx专家,但是我相信10表示所有子域,但不包括主域。尝试使用class HomeController extends AbstractController { /** * @Route("/", name="site_home", host="domain.test") */ public function homePage() { return $this->render('site/home/index.html.twig'); } }

答案 1 :(得分:0)

在NGINX配置中,您可以指定多个server_name,例如:  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