Apache/PHP:通过PHP检索ServerName设置的任何方法
我有一个Apache虚拟主机,如下所示:Apache/PHP:通过PHP检索ServerName设置的任何方法,php,apache,apache2,virtualhost,Php,Apache,Apache2,Virtualhost,我有一个Apache虚拟主机,如下所示: <VirtualHost *:80> ServerName host1.example.com ServerAlias host2.example.com DocumentRoot /srv/web/host1.example.com/pub </VirtualHost> 我请求以下URL(请注意,我使用的是ServerAlias,而不是ServerName: http://host2.example.c
<VirtualHost *:80>
ServerName host1.example.com
ServerAlias host2.example.com
DocumentRoot /srv/web/host1.example.com/pub
</VirtualHost>
我请求以下URL(请注意,我使用的是ServerAlias
,而不是ServerName
:
http://host2.example.com/test.php
我想让
test.php
以某种方式输出ServerName
变量(host1.example.com
)。有什么方法可以做到这一点吗?显然,当您通过别名访问VirtualHost时,没有原始主机的痕迹
SERVER\u NAME
在任何$\u SERVER
变量中
我唯一想到的是设置一个环境变量:
SetEnv MY_HOST host1.example.com
这应该将
$\u SERVER[“MY_HOST”]
的值设置为正确的主机名。但不保证,我在实践中从未尝试过此操作。对于我们的Web主机,默认的管理员电子邮件是webmaster@
。多亏了这一点,我可以通过电子邮件获得virtuel主机名
$virtualhostname = substr($_SERVER['SERVER_ADMIN'], strpos($_SERVER['SERVER_ADMIN'], '@') + 1);
伙计,我提交了我的答案,得到了一个验证码,这让我慢了下来。否则我会打败你。+1根据我上面提供的例子,
$\u SERVER['SERVER\u NAME']
包含host2.example.com
,而不是host1.example.com
@matt啊,对不起,读得太多了.Hmmm,在这种情况下,您可能会被$\u服务器['HTTP\u HOST']
卡住,但这需要小心处理,因为它可以由客户端自由设置。请执行打印($\u服务器)
要查看别名是否在该星座中的任何其他变量中,它可能是$\u SERVER['HTTP\u HOST']
包含host2.example.com
,而不是host1.example.com
。字符串host1.example.com
根本不在$\u服务器中。@matt-hmmm,我明白了。很棘手。在这种情况下,我想到的唯一办法是添加SetEnv MY\u HOST host1.example.com
。它应该设置一个MY\u HOST
环境您应该能够从$\u服务器
获取的变量。请尝试它-但不保证,您从未尝试过此操作。
$virtualhostname = substr($_SERVER['SERVER_ADMIN'], strpos($_SERVER['SERVER_ADMIN'], '@') + 1);