Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache/PHP:通过PHP检索ServerName设置的任何方法_Php_Apache_Apache2_Virtualhost - Fatal编程技术网

Apache/PHP:通过PHP检索ServerName设置的任何方法

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

我有一个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.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);