我在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。