$ _SERVER ['DOCUMENT_ROOT']不返回预期的目录位置

时间:2017-04-05 10:33:27

标签: php apache virtualhost httpd.conf

我访问了我网站的子文件夹并收到了此错误:

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,它应该返回值为/ var / www / html / php /的文档引用?

谢谢你们!

1 个答案:

答案 0 :(得分:1)

端口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