Symfony 2.2+中基于主机的路由配置

时间:2013-07-21 01:14:00

标签: php symfony

所以我想利用Symfony的基于主机的路由。

说我想配置m.mydomain.com和mydomain.com - 但是我希望同一个应用程序(Symfony应用程序)能够主持这两个应用程序。

m.mydomain.com将是服务器上的不同子域。基本上,这两个域都将指向完全不同的位置。 Symfony2如何使用应用程序的一个实例实际控制这两个域?或者我是否真的需要在每个支持的主机名上安装一个symfony app实例?我是否需要任何.htaccess配置才能使其专门工作?

基于主机的路由如何真正起作用?

1 个答案:

答案 0 :(得分:0)

要了解发生了什么,您需要了解virtual hosting,这是Apache等Web服务器的常见功能。

如果指向同一IP地址的两个或多个主机或DNS条目,则Web浏览器可以通过两个或多个主机名访问同一Web服务器(例如m.mydomain.commydomain.com) 。当您的浏览器使用HTTP 1.1请求页面时(可以安全地假设是这种情况),它将让Web服务器知道它用于连接的主机名。

可以将Web服务器配置为根据主机名提供不同的网站 - 每个网站配置通常称为虚拟主机。

虚拟主机也可以为多个主机名提供相同的网站(或Web应用程序)。对此的Apache配置可能如下所示:

<VirtualHost *:80>
    ServerName mydomain.com
    ServerAlias m.mydomain.com
    DocumentRoot /var/www/mydomain/web

    # ...
</VirtualHost>

当Symfony处理请求时,它可以通过PHP超全局$_SERVER['SERVER_NAME']访问主机名。它实际上在启动期间擦除了超全局数组,因此您将无法在应用程序代码中使用它。改为在当前请求对象的实例上调用getHost()

Symfony的路由组件使用相同的信息按主机名过滤请求。请参阅课程Symfony\Component\Routing\Matcher\UrlMatcher

希望了解正在发生的事情,应该可以设置您的Web服务器,以便可以通过不同的主机名访问同一个虚拟主机,然后按照Symfony文档How to Match a Route Based on the Host进行操作。