在Web服务器上设置PHP Document Root

时间:2014-07-29 14:06:39

标签: php apache ubuntu

目前我有一个运行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没有拿到上面的虚拟文档根设置,我可能做错了。

2 个答案:

答案 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