You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache2 如何为主虚拟主机下的各子目录单独设置Document Root

解决方案

完全可以在不拆分虚拟主机的前提下实现需求,针对你的场景有两种可行方案:

方案1:修改主虚拟主机配置(全局统一管理)

在你现有的<VirtualHost *:80>块内,为每个子目录追加配置即可,示例如下:

<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

    # 追加test子目录配置
    <Location /test>
        # 覆盖$_SERVER['DOCUMENT_ROOT']取值
        SetEnv DOCUMENT_ROOT /var/www/html/test
        # 调整PHP包含路径优先级,优先读取test目录下的文件
        php_value include_path ".:/var/www/html/test"
    </Location>

    # 追加test2子目录配置
    <Location /test2>
        SetEnv DOCUMENT_ROOT /var/www/html/test2
        php_value include_path ".:/var/www/html/test2"
    </Location>
</VirtualHost>

修改完成后重启Apache服务生效。

方案2:使用.htaccess配置(无需重启服务,站点单独管理)

因为你已经开启了AllowOverride All,可以直接在每个站点子目录下新增.htaccess文件实现配置,不需要修改全局Apache配置。
以/var/www/html/test目录为例,在该目录下新建.htaccess,写入以下内容:

SetEnv DOCUMENT_ROOT /var/www/html/test
php_value include_path ".:/var/www/html/test"

配置即时生效,无需重启服务。

特殊场景适配

如果你的服务使用PHP-FPM模式运行,Apache的php_value指令可能不生效,可以替换为在对应子目录下新增.user.ini配置文件,内容如下:

include_path = ".:/var/www/html/test"
doc_root = "/var/www/html/test"

内容的提问来源于stack exchange,提问作者Shellai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:36:03