如何在Apache服务器的指定路径下部署多个网站?
Apache同域名子路径部署多项目(site_a/site_b)
问题背景
需要在Ubuntu的Apache服务器上部署site_a和site_b两个项目,通过{domain}/site_a和{domain}/site_b访问,不使用独立域名。项目存储在/home目录(因包含非公开文件,不能放/var/www),之前尝试用带路径的ServerName配置VirtualHost,导致访问根路径{domain}/时显示site_a/public的内容,子路径配置未生效。
错误原因
VirtualHost的ServerName仅用于匹配请求域名,不能包含路径。之前的两个VirtualHost都匹配同一域名,Apache默认加载第一个生效的配置(site_a),因此根路径指向其public目录,子路径规则完全失效。
正确配置方案
使用Alias指令映射子路径到项目的public目录,具体步骤如下:
1. 禁用错误配置
sudo a2dissite site_a.conf site_b.conf
2. 创建新的多项目配置文件
新建/etc/apache2/sites-available/multi-sites.conf,内容如下:
<VirtualHost *:80> ServerAdmin webmaster@your-domain.com ServerName your-domain.com # 替换为你的实际域名 ServerAlias www.your-domain.com # 可选,添加www前缀域名 # 根路径默认内容(可选,保留默认或自定义) DocumentRoot /var/www/html # 映射/site_a到site_a的public目录 Alias /site_a /home/site_a/public <Directory /home/site_a/public> Options Indexes FollowSymLinks AllowOverride All # 需支持.htaccess则设为All,否则None Require all granted </Directory> # 映射/site_b到site_b的public目录 Alias /site_b /home/site_b/public <Directory /home/site_b/public> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/multi-sites-error.log CustomLog ${APACHE_LOG_DIR}/multi-sites-access.log combined </VirtualHost>
3. 启用配置并重启Apache
sudo a2ensite multi-sites.conf sudo systemctl restart apache2
4. 调整目录权限
确保Apache运行用户(www-data)能读取项目文件:
sudo chown -R www-data:www-data /home/site_a /home/site_b sudo chmod -R 755 /home/site_a /home/site_b
补充说明
- 若不需要根路径内容,可删除
DocumentRoot行,或设置为空目录; AllowOverride All用于支持项目中的.htaccess规则(如框架URL重写),无需则改为None;- 若
/home目录权限限制www-data访问,执行sudo chmod 755 /home开放权限。
内容的提问来源于stack exchange,提问作者Ichi
相关产品推荐
相关产品推荐

