apache通过alias指令将url子路径(如/admin、/api)映射到documentroot外的独立物理目录,并配合块配置require all granted等权限,实现多项目隔离部署。

Apache 的 DocumentRoot 本身只管“主入口”,要支持子目录部署(比如 /admin、/api、/blog 各自指向不同项目),不能只改 DocumentRoot,得靠 Alias + Directory 组合实现。核心是让每个子路径映射到独立物理目录,并赋予执行权限。
子目录映射用 Alias 指令
Alias 把 URL 路径和真实文件系统路径做一对一映射,不依赖 DocumentRoot。例如:
-
Alias "/admin" "/var/www/myapp-admin/public"→ 访问http://site.com/admin/就加载该目录下的 PHP 文件 -
Alias "/api" "/var/www/myapp-api/public"→/api/index.php实际运行的是后者的脚本 - Alias 路径以
/开头,目标路径必须是绝对路径,且末尾不加斜杠
每个子目录都要配 Directory 权限块
Alias 只负责路径映射,能不能读、能不能执行 PHP,由对应的 <directory></directory> 控制。缺了它,大概率 403 或下载源码:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 必须包含
Require all granted(Apache 2.4+) - 要支持 .htaccess 重写(如 Laravel/ThinkPHP 路由),加上
AllowOverride All - 确保能解析 PHP,需在该 Directory 块内或全局启用
AddType application/x-httpd-php .php - 示例:
Options FollowSymLinks
AllowOverride All
Require all granted
DocumentRoot 保持干净,不混放子项目
主 DocumentRoot 应只放通用静态资源或入口页,避免和子目录项目交叉。常见安全做法:
- DocumentRoot 设为
/var/www/html,里面只放index.html或维护页 - 所有子应用(admin/api/blog)全部通过 Alias 引入,不放进 DocumentRoot 下的子文件夹
- 这样既隔离代码,又防止误访问敏感目录(比如
/var/www/myapp/config/)
PHP 执行能力要全局或按需启用
子目录能否运行 PHP,取决于 PHP 模块是否加载,以及对应路径是否被允许执行:
- 确认
LoadModule php_module modules/libphp.so已启用(Linux)或 DLL 已加载(Windows) -
PHPIniDir指向正确的 php.ini 位置(尤其 Windows 多版本共存时) - 如果某些子目录只需静态文件(如
/static),可单独配<directory></directory>禁用 PHP:
Require all denied










