VirtualDocumentRoot工作良好,但不对$_SERVER[“DOCUMENT_ROOT”]进行任何更改


VirtualDocumentRoot works well but does not make any change to $_SERVER["DOCUMENT_ROOT"]

我在apache上使用VirtualDocumentRoot指令来动态虚拟主机,现在我的虚拟主机运行良好但是我检查了$_SERVER["DOCUMENT_ROOT"]的值它仍然具有第一个DocumentRoot定义的值不是VirtualDocumentRoot值!

我的"http.conf"文件的简短部分是:

UseCanonicalName Off
DocumentRoot "/var/www/html"
<VirtualHost *:80>
    ServerAdmin admin@localhost
    VirtualDocumentRoot "/var/vhosts/%0"
    ErrorLog "logs/dynamic-vhosts-error.log"
    CustomLog "logs/dynamic-vhosts-access.log" combined
</VirtualHost>

当我在下面运行这个php代码时

<?php
echo $_SERVER["DOCUMENT_ROOT"];
?>

结果我得到了/var/www/html。如果我评论这行

#DocumentRoot "/var/www/html"

PHP的结果将是

/etc/httpd/htdocs

但我希望$_SERVER["DOCUMENT_ROOT"]的值如下:

/var/vhosts/exampleDomain.com

有什么解决办法吗?

请参阅http://joshbenner.me/blog/quick-tip-get-proper-document-root-when-using-mod-vhost-alias/

我在相关的apache错误报告中找到了一个很好的解决方案:只需在VirtualDocumentRoot vhost定义中向您的apache配置中添加以下行:

php_admin_value auto_prepend_file /path/setdocroot.php

然后,创建引用的PHP文件,并将其设置为其内容:

<?php $_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['SCRIPT_FILENAME']);

现在,每个页面加载都会执行此文件,从而正确设置DOCUMENT_ROOT。