documentroot定义网站主根目录,alias将url路径映射到documentroot之外的物理位置;两者分工协作,alias优先匹配且需独立配置directory权限。

Apache 中 Alias 和 DocumentRoot 不是二选一的关系,而是分工明确、协同工作的两个核心指令:DocumentRoot 定义网站的“主阵地”,Alias 则是为外部资源开的“专用通道”。只要配置得当,它们能共存且互不干扰。
DocumentRoot 是网站的起点
它告诉 Apache:“用户访问我的域名(比如 http://example.com)时,请从这个文件夹开始找文件。”
- 必须用绝对路径,例如
DocumentRoot "/var/www/example.com"(Linux)或DocumentRoot "C:/xampp/htdocs"(Windows) - 必须配套
<directory></directory>块授权,否则请求会返回 403 Forbidden。例如:<directory><br> Require all granted<br></directory>
- 修改后需重启 Apache(
systemctl restart apache2或httpd -k restart),仅重载配置不生效 - 常见问题包括路径末尾多斜杠、目录权限未开放、属主不是 Apache 运行用户(如 www-data)
Alias 是通向外部资源的桥梁
当你需要让浏览器访问 DocumentRoot 之外的目录(比如用户上传目录、CDN 静态资源、共享存储路径),就靠 Alias 实现 URL 映射。
- 语法是
Alias /url-path "/real/file/system/path",其中 URL 路径必须以/开头 - Alias 规则优先于 DocumentRoot 匹配。例如配置了
Alias /uploads /srv/user_uploads,那么访问/uploads/photo.jpg就直接指向/srv/user_uploads/photo.jpg,完全绕过 DocumentRoot - 必须为物理路径单独配置
<directory></directory>,且路径要与 Alias 后的真实路径严格一致(尾部斜杠建议统一) - 若目标目录含符号链接,需在
<directory></directory>中加Options FollowSymLinks
两者共存的关键要点
Alias 不是 DocumentRoot 的子集,也不依赖它“计算”路径——它是独立路由规则,与 DocumentRoot 平级协作。
- 确保
mod_alias已启用:Linux 上运行apache2ctl -M | grep alias,Windows 检查httpd.conf是否启用了LoadModule alias_module modules/mod_alias.so - Alias 不能写在
.htaccess文件中,只能放在主配置(httpd.conf)、<virtualhost></virtualhost>块或启用的站点配置里 - 若访问行为异常(比如本该走 Alias 却返回 DocumentRoot 下的文件),大概率是 Alias URL 路径没匹配上,请求已 fallback 到 DocumentRoot 解析——检查斜杠是否一致、大小写是否匹配、是否有拼写错误
- 生产环境慎用
Options Indexes(目录列表),避免敏感内容暴露;AllowOverride All也建议按需收紧
典型使用场景举例
比如主站代码放在 /var/www/site,而用户上传图片存在 /srv/uploads,想通过 /media 访问:
- 设置
DocumentRoot "/var/www/site",并授权该目录 - 添加
Alias /media "/srv/uploads" - 再配一个
<directory> Require all granted </directory> - 重启 Apache,访问
http://example.com/media/avatar.png就能读取/srv/uploads/avatar.png











