【发布时间】:2023-03-14 10:48:01
【问题描述】:
我设计了一个多路应用程序。有多站点管理员(即http://root.com/admin)以及所有站点访问权限(即http://site1.com、http://site2.com..。)。
为了处理路由(多站点管理员或子站点),我在 vhost 配置上设置了 UseCanonicalName:
ServerName root.com
ServerAlias media.site1.com site1.com media.site2.com, site2.com ...
UseCanonicalName On
这样做,我确信 $request->server->get('SERVER_NAME') 在给定的情况下总是会返回 root.com,我在路由过程中使用它来区分根域(对于管理员目的)、子网站和 404 内容。
它在现实生活中运行良好,但在测试方面,UseCanonicalName 似乎不会强制使用在 vhost 中定义的 ServerName 的 SERVER_NAME。
从常规 Chrome 客户端转储:
array(34) {
'HTTP_HOST' =>
string(9) string 'site1.com'
...
'HTTP_USER_AGENT' =>
string(105) 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36'
'SERVER_NAME' =>
string(8) 'root.com'
...
}
从测试客户端转储
array(16) {
'SERVER_NAME' =>
string(9) "site1.com"
'HTTP_HOST' =>
string(9) "site1.com"
'HTTP_USER_AGENT' =>
string(19) "Symfony2 BrowserKit"
...
}
我试图在测试客户端上强制使用 SERVER_NAME:
$crawler = $this->client->request('GET', $route, [], [], ['SERVER_NAME' => 'root.com']);
但这并没有改变任何事情,我仍然拥有等于 HTTP_HOST 的 SERVER_NAME 值,这在测试子站点 FO 或 BO 时会搞砸一切(当 SERVER_NAME 和 HTTP_HOST 之间的差异很重要时)。
所以,
- 为什么 Symfony2 BrowserKit 对 UseCanonicalName 指令不敏感?
- 如何使用客户端类参数强制它?
【问题讨论】:
标签: php apache symfony testing client