0

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

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

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

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

4

1 回答 1

0

要了解发生了什么,您需要了解虚拟主机,这是 Apache 等 Web 服务器中的一个常见功能。

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

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

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

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

    # ...
</VirtualHost>

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

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

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

于 2014-11-13T17:55:42.830 回答