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
相关产品推荐
相关产品推荐

