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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:03:36