$ _ SERVER [“DOCUMENT_ROOT”]不返回

问题描述:

我访问我的网站的子文件夹,并得到这个错误预期的目录位置:

PHP Warning: include_once(): Failed opening '/var/www/html//include/version.inc' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /srv/sparrow/php/include/branches.inc on line 3 

似乎$ _ SERVER [“DOCUMENT_ROOT”]返回一个错误的目录是这样的:

/var/www/html/ 

如果我访问www.my.website/php,这应该是预期的目录中$ _ SERVER [“DOCUMENT_ROOT”]应该返回:

/var/www/html/php/ 

这是我的虚拟主机配置:

NameVirtualHost *:80 

<VirtualHost *:80> 
    ServerName www.mywebsite.com 
    DocumentRoot /var/www/html/ 

    <Directory /var/www/html/> 
    Options -Indexes -MultiViews 
    </Directory> 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName www.mywebsite.com/ph 
    # Webroot of PHP site 
    DocumentRoot /var/www/html/php/ 

    <Directory /var/www/html/php/> 
    Options -Indexes -MultiViews 
    </Directory> 
</VirtualHost> 

我如何配置我的虚拟主机配置,例如,如果我访问www.my.website/php它应该值返回的DocumentRoot/var/www/html/php /?

谢谢你们!

+0

文档根有__fixed__值。您应将网站上的任何路径追加到文档根目录__manually__ –

+0

Thanks @u_mulder。 :) – Michael

您在端口80上有两个虚拟主机。第一场胜利。您应该通过IP,服务器名称或端口来区分它们。如果两者都运行在相同的端口上,那么如果您使用的是Apache 2.2(不需要2.4),则还需要NameVirtualHost 80

我敢肯定,如果你交换的虚拟主机,你会得到/var/www/html/php/$_SERVER['DOCUMENT_ROOT']

但还是: 如果你有两个虚拟主机,让他们区分!


更新

其他重写(需要mod_rewrite被激活)在上的虚拟主机,这样就可以把第二个虚拟主机:如果你想隐藏

RewriteEngine On 
RewriteRule ^/ph/(.*)$ http://www.mywebsite.com/ph/$1 [R=301,L] 

[P,L]您正在重写,但[P]要求mod_proxy也要被激活。

+0

嗨@你好Fishy,谢谢你回答我的问题。我为每个虚拟主机添加了servername来区分它们,它不起作用。我遵循这个NameVirtualHost的文档。 https://httpd.apache.org/docs/2.2/vhosts/name-based.html – Michael

+0

'www.mywebsite.com/ph'不是服务器名称:('/ ph'是URI和'www.mywebsite。 com'是一个服务器名...所以两个虚拟主机仍然听相同的端口和名称 - >不能工作...任何一个应该有另一个端口或另一个名称。顺便说一句,你真的需要两个虚拟主机? –

+0

是的,我真的需要它们,如果我访问www.mywebsitemcom/ph,它应该使用第二个虚拟主机,如果没有,那么将会发生错误,因为文档不正确,谢谢你好,Fishy为你提供帮助 – Michael