You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在基于名称的虚拟主机环境中,如何获取请求对应的虚拟主机名称?

获取基于名称的虚拟主机对应的主机名

在基于名称的虚拟主机环境中,直接通过PHP的$_SERVER超全局变量就能获取到请求对应的虚拟主机名称,具体有两种可靠方式:

  • 使用$_SERVER['HTTP_HOST']:这个变量直接对应HTTP请求头里的Host字段值,也就是客户端发起请求时指定的虚拟主机域名,是最准确的取值方式。
  • 使用$_SERVER['SERVER_NAME']:这个值来自虚拟主机配置文件中的ServerName指令,当客户端未发送Host头时会 fallback 到这个值,但优先推荐HTTP_HOST。

示例代码

你可以把这个逻辑整合到自定义日志脚本中:

// 获取客户端IP
$ip = $_SERVER["REMOTE_ADDR"];
// 获取请求对应的虚拟主机名称
$virtualHost = $_SERVER['HTTP_HOST'];
// 可选:反向解析IP对应的主机名
$host = gethostbyaddr($ip);

// 构造日志内容
$logContent = date('Y-m-d H:i:s') . " | IP: {$ip} | 反向解析主机: {$host} | 虚拟主机: {$virtualHost}\n";
// 写入日志文件(注意设置合适的文件权限)
file_put_contents('custom_access_log.txt', $logContent, FILE_APPEND | LOCK_EX);

关于你遇到的Host字段问题

你之前测试时看到Host字段只显示自己的虚拟主机名称,是因为你访问的就是自己的站点。当同一IP下的其他虚拟主机被请求时,HTTP_HOST会自动变成对应站点的域名——这正是基于名称的虚拟主机工作的核心逻辑:通过Host头区分不同站点。

内容的提问来源于stack exchange,提问作者andreL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:24:59