Apache2 - 根据子目录设置文档根目录

Apache2 - Set Document Root based on subdirectory

我有一个默认的虚拟主机。它被配置为在 /var/www/html 内监视文档根并且工作得很好。但我有一个问题。我在子目录中有多个站点,但我不知道如何为每个站点设置文档根目录。例如,/var/www/html/test/var/www/html/test2 等。当我包含来自 /var/www/html/test 的文件时,它会在 var/www/html 中搜索。例如,我包含 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>

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

Is it possible to set Document Root for each of directories inside main Virtual Host?

简短的回答是否定的,你不能。每个虚拟主机 1 个文档根目录。为了理解这些东西是如何工作的,你需要理解什么是 directives context. Lets take as an example VirtualHost directive。正如我们从文档中看到的那样,它只有 1 个上下文,即服务器配置。服务器配置上下文告诉下一个:

directive may be used in the server configuration files (e.g., httpd.conf), but not within any VirtualHost or Directory containers. It is not allowed in .htaccess files at all.

但是DoocumentRoot有两个上下文:服务器配置和虚拟主机。休息你自己想办法;)

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

  1. Running several name-based web sites on a single IP address
  2. Running different sites on different ports
  3. Mixed port-based and ip-based virtual hosts

希望本回答对您有所帮助!