要了解发生了什么,您需要了解虚拟主机,这是 Apache 等 Web 服务器中的一个常见功能。
给定两个或多个指向同一 IP 地址的主机或 DNS 条目,Web 浏览器可以通过两个或多个主机名(例如m.mydomain.com
和mydomain.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进行操作。