所以我想利用Symfony的基于主机的路由。
说我想配置m.mydomain.com和mydomain.com - 但是我希望同一个应用程序(Symfony应用程序)能够主持这两个应用程序。
m.mydomain.com将是服务器上的不同子域。基本上,这两个域都将指向完全不同的位置。 Symfony2如何使用应用程序的一个实例实际控制这两个域?或者我是否真的需要在每个支持的主机名上安装一个symfony app实例?我是否需要任何.htaccess配置才能使其专门工作?
基于主机的路由如何真正起作用?
答案 0 :(得分:0)
要了解发生了什么,您需要了解virtual hosting,这是Apache等Web服务器的常见功能。
如果指向同一IP地址的两个或多个主机或DNS条目,则Web浏览器可以通过两个或多个主机名访问同一Web服务器(例如m.mydomain.com
和mydomain.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进行操作。