如何使用VirtualDocumentRoot在每个请求的基础上覆盖DocumentRoot

时间:2012-12-18 12:27:58

标签: apache mod-rewrite mod-vhost-alias

所以人们抱怨当使用VirtualDocumentRoot和mod_vhost_alias运行Apache时PHP脚本如何使用DOCUMENT_ROOT中断,因为DOCUMENT_ROOT没有正确设置。 Apache很快就解决了这个问题,简要说明如下: http://svn.apache.org/viewvc?view=revision&revision=1132494

可悲的是,没有足够的细节解释如何基于每个请求实际覆盖DocumentRoot。我猜它必须以某种方式用mod_rewrite完成,但我不确定。有谁知道怎么做?

2 个答案:

答案 0 :(得分:3)

嗯,很明显,我并没有提出正确的问题。以下是我在Step2的Apache2 Bugzilla列表中直接获得的一些信息:

斯蒂芬说:

  

错误报告是关于VirtualDocumentRoot的,现在设置了   DOCUMENT_ROOT正确。因此问题得到解决。

我回过头来澄清:

  

也许我错过了一些东西,但我很确定我已经测试过了   php中的$ _SERVER ['DOCUMENT_ROOT']并且它与值集不匹配   通过VirtualDocumentRoot。你说它现在应该匹配吗?

他回答说:

  

是的,在2.4.x.修复程序不太可能被移植到   2.2.x因为它需要仅存在于2.4中的基础设施。

所以我运行apache2 -v并发现我没有运行2.4.x. Apache2 -v显示了这个:

Server version: Apache/2.2.16 (Debian)
Server built:   Nov 30 2012 08:33:45

如果您注意到服务器是在今年11月底我使用aptitude -install apache2时构建的。我不知道apt-get是否会取代apache 2.4。这非常蹩脚。 2.4.3稳定在8月份发布。我不知道为什么天赋会拉2.2但这确实给我带来了噩梦。

所以实际上,我问的问题没有实际意义。一切都应该工作正常,除了aptitude安装了过时的apache2,我没有意识到发生了什么。没有错误了。

答案 1 :(得分:1)

mod_vhost_alias是官方发行版中唯一设置每请求文档根目录的模块。

预先存在的代码,包括设置DOCUMENT_ROOT CGI环境变量的代码,通过ap_document_root(r)查找文档根目录,可以看到这些变化。

此更改还为mod_userdir等模块引入了一个新概念,其中“document root”并不合适。这个新概念有新的API和新的CGI环境变量(CONTEXT_PREFIX,CONTEXT_DOCUMENT_ROOT),它们没有绑定到传统的文档根目录。

我认为唯一真实相关的文件是:

  • 开发人员的文档(基本完成)
  • doc for migks who who DOCUMENT_ROOT由mod_vhost_alias设置
  • CGI /环境变量doc,了解新的CONTEXT_ *变量是什么

但是,由于mod_vhost_alias和现有的DocumentRoot API和环境变量一起工作,我不认为这些因为事情“破坏”。

如果问题确实是mod_vhost_alias之外的“how”,请查看mod_userdir和mod_vhost_alias之间关于ap_set_document_root()和ap_set_context_info()的区别,然后查看这些结果如何导致server / util_script.c中的CGI环境变量

相关问题