如何在同一域名不同路径部署多个Angular4项目(Apache2 Linux环境)
配置Apache2实现example.com/admin指向独立Angular项目目录
没问题,我来帮你搞定这个Apache配置的事儿,毕竟Angular项目在Apache下部署确实要注意路由和路径映射的细节,步骤其实很清晰:
第一步:先处理第二个Angular项目的打包配置
因为你的第二个项目要部署在/admin子路径下,必须在打包时指定正确的base href,否则Angular的路由会出问题。在项目目录下执行:
ng build --prod --base-href /admin/
这样生成的dist2目录里的index.html会自动带上<base href="/admin/">标签,确保路由跳转正常。
第二步:修改Apache虚拟主机配置
找到你的站点配置文件,通常在/etc/apache2/sites-available/目录下,比如example.com.conf,用编辑器打开它(记得加sudo),添加Alias和对应的目录规则:
<VirtualHost *:80> ServerName example.com # 主站点根目录 DocumentRoot /example/project_name1/dist1 # 核心:把/admin路径映射到第二个项目的dist目录 Alias /admin /example/project_name2/dist2 # 主站点的目录配置,处理第一个Angular项目的路由 fallback <Directory /example/project_name1/dist1> Options Indexes FollowSymLinks AllowOverride All Require all granted RewriteEngine On # 如果请求的文件/目录不存在,重写到主站点的index.html RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.html [L] </Directory> # /admin路径对应的目录配置,处理第二个Angular项目的路由 <Directory /example/project_name2/dist2> Options Indexes FollowSymLinks AllowOverride All Require all granted RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 这里要重写到/admin/index.html,对应我们设置的base href RewriteRule ^(.*)$ /admin/index.html [L] </Directory> ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined </VirtualHost>
第三步:启用必要模块并验证配置
- 确保Apache的rewrite模块已经启用(Angular路由必须依赖这个):
sudo a2enmod rewrite
- 测试配置文件是否有语法错误:
sudo apache2ctl configtest
如果输出Syntax OK,就可以重启Apache生效:
sudo systemctl restart apache2
第四步:检查目录权限
确保Apache的运行用户(一般是www-data)有读取两个dist目录的权限:
sudo chown -R www-data:www-data /example/project_name1/dist1 /example/project_name2/dist2
验证效果
现在访问example.com应该正常显示第一个Angular项目,访问example.com/admin就能看到第二个项目了,而且像example.com/admin/settings这类路由也不会出现404错误。
如果你的站点用了HTTPS,记得在*:443的虚拟主机块里做同样的配置哦!
内容的提问来源于stack exchange,提问作者Akash lal
相关产品推荐
相关产品推荐

