首页 > 解决方案 > Apache2 - 根据子目录设置文档根目录

问题描述

我有一个默认的虚拟主机。它被配置为在里面观看 Document Root/var/www/html并且效果很好。但我有一个问题。我在子目录中有多个站点,但我不知道如何为每个站点设置 Document Root。例如,/var/www/html/test,/var/www/html/test2等。当我包含来自 的文件时/var/www/html/test,它会在var/www/html. 例如,我包含文件 like include_once '/core.php',但我有一个错误Failed opening required '/var/www/html/core.php',因为这里没有当前文件。是否可以为主虚拟主机内的每个目录设置文档根目录?谢谢!

我的主要虚拟主机配置:

<VirtualHost *:80>
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
    AccessFileName .htaccess

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

此外,您可以说,我需要使用相对路径,但在某些方面这是不可能的,因为有时,我使用由其他人创建的现成站点。

标签: phpapache2virtualhost

解决方案


是否可以为主虚拟主机内的每个目录设置文档根目录?

简短的回答是否定的,你不能。每个虚拟主机 1 个文档根目录。为了了解事情是如何工作的,您需要了解指令上下文是什么。让我们以VirtualHost 指令为例。正如我们从文档中看到的,它只有 1 个上下文,即服务器配置。服务器配置上下文告诉接下来:

指令可以在服务器配置文件(例如 httpd.conf)中使用,但不能在任何 VirtualHost 或 Directory 容器中使用。.htaccess 文件中根本不允许这样做。

但是DoocumentRoot有两个上下文:服务器配置和虚拟主机。休息一下,你应该自己弄清楚;)

有很多方法可以达到预期的效果

  1. 在一个 IP 地址上运行多个基于名称的网站
  2. 在不同的端口上运行不同的站点
  3. 混合基于端口和基于 IP 的虚拟主机

希望这个答案对你有帮助!


推荐阅读