目前我有一个运行apache2的Ubuntu 12.04网络服务器。我设置了动态创建子域名,方法是在/sites/example.com/*/public /sites/example.com/www/public下为我的主根网站保留新文件夹。
这很有用,但是我无法将PHP的$_SERVER['DOCUMENT_ROOT']
配置为对新创建的文件夹动态。
当我回显$_SERVER['DOCUMENT_ROOT']
时,我得到了 / etc / apache2 / htdocs ,我认为这是某种默认路径。我希望这是:/sites/example.com/*/public而不是
# Wildcards
<VirtualHost *:80>
VirtualDocumentRoot /sites/example.com/%1/public
ServerAdmin mike@example.com
ServerAlias *.example.com
</VirtualHost>
好奇为什么PHP没有拿到上面的虚拟文档根设置,我可能做错了。
答案 0 :(得分:6)
在http://joshbenner.me/blog/quick-tip-get-proper-document-root-when-using-mod-vhost-alias/
找到解决方案Apache模块mod_vhost_alias及其VirtualDocumentRoot 指令可以真正节省本地开发的时间(一些 谷歌搜索将解释为什么更多deapth)。基本上,我的本地开发人员是 设置,以便我只需要在别名中创建一个目录 目录,然后我将浏览器导航到匹配的URL 该新目录的名称,apache确切地知道要提供什么 自动的。
但是,使用mod_vhost_alias时会有一些邪恶的问题 其中PHP全局$ _SERVER ['DOCUMENT_ROOT']仍然设置 到apache默认的DOCUMENT_ROOT环境变量而不是 被重新分配给由...激活的文档根目录 当前URL的VirtualDocumentRoot指令。这可能会导致一些 PHP应用程序(太信任)因某种原因而死亡 另一个。
我在相关的apache错误报告中找到了一个很好的解决方案: 只需将以下行添加到您的apache配置中 VirtualDocumentRoot vhost定义:
php_admin_value auto_prepend_file /path/setdocroot.php
然后,创建引用的PHP文件,并将其设置为它 内容:
<?php $_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['SCRIPT_FILENAME']); ?>
现在,每个页面加载都会执行此文件,并正确设置 DOCUMENT_ROOT。
答案 1 :(得分:1)
这显然(最终)在Apache 2.4中been fixed。不幸的是,Ubuntu 12.04仍然运行Apache 2.2。
话虽如此,Ubuntu 14.04(下一个LTS版本)现已推出,do-release-upgrade
现在应该启用12.04到14.04升级,因为14.04已经发布了第一个版本last week。