文档根目录(DocumentRoot)就是Web服务器上存放网站公开文件、并能通过HTTP请求直接访问到的那一个文件夹。 你输入网址后,服务器从请求头里解析出域名和路径,再根据站点配置把这个路径映射到服务器磁盘上的某个具体目录,这个过程就叫“解析文档根目录”。
文档根目录是什么:先搞清楚它和“站点目录”的关系
很多新手在服务器上建站时,会同时看到“站点目录”“网站目录”“Web根目录”这些词,它们其实指向同一个东西:也就是你放index.html、WordPress或ThinkPHP项目代码的那个文件夹,想象一下,服务器是一个小区,域名是门牌号,文档根目录就是你的房子,访客通过门牌号找到小区,服务器则根据配置文件,把他们“领”到你的房子里去取文件。
一次完整的网页访问,服务器到底做了什么
假设你的域名是example.com,IP指向一台国内云服务器,站点配置文件里写着文档根目录为/var/www/example,用户访问http://example.com/about.html时,服务器会执行这些动作:
- 解析域名,锁定对应的站点配置。
- 从配置中读取DocumentRoot的值。
- 把请求路径
/about.html拼接到文档根目录后面。 - 在
/var/www/example/about.html找到文件,读取内容并返回给浏览器。
如果这一步找不到文件,服务器就会根据配置返回404,而不是去服务器上的其他文件夹里乱翻,文档根目录就是“公开区域”的边界,边界之外的文件,比如数据库配置文件、日志文件,理论上都不应该被直接通过URL访问到。
文档根目录和网站根目录有什么区别
这个问题在搜索引擎里经常被问到,答案是:绝大多数场景下,二者指同一个位置,但侧重点略有不同。
- “网站根目录”是从网站项目结构的角度说的,它包含所有站点文件,包括私密脚本、上传目录、配置缓存等。
- “文档根目录”是从Web服务器配置的角度定义的,它是HTTP协议能直接访问到的最底层目录,如果文档根目录被指定为
/var/www/html/public,那么网站根目录可能是/var/www/html,此时网站根目录里的框架核心文件(如Laravel的app目录)并不会暴露给访客。
文档根目录是网站根目录中对外可见的那一层,使用ThinkPHP或Laravel这类框架时,服务器文档根目录通常要指向public子目录,这就是两者的典型区别。
默认文档与目录列表的配合逻辑
文档根目录通常还会搭配“默认文档”设置,例如Nginx的

index指令或Apache的DirectoryIndex,当访问根域名时,服务器会在文档根目录里查找index.php或index.html,如果找不到默认文档,且开启目录列表,就会直接展示这个目录下的所有文件名;如果关闭目录列表,则会返回403或404,很多安全漏洞恰恰因为管理员把目录列表开在文档根目录上,导致源码被遍历下载。
不同Web服务器的文档根目录默认在哪里
Apache、Nginx、IIS是三类主流Web服务器,它们的默认路径差异很大,换服务器时经常踩坑,下表对比了常见默认位置:
| 服务器类型 | 操作系统 | 默认文档根目录 |
|---|---|---|
| Apache | CentOS / RHEL | /var/www/html |
| Apache | Debian / Ubuntu | /var/www/html |
| Nginx | CentOS / Debian / Ubuntu | /usr/share/nginx/html(部分发行版为/var/www/html) |
| IIS | Windows Server | %SystemDrive%inetpubwwwroot |
| Tomcat | Linux / Windows | webapps/ROOT(相对Tomcat安装目录) |
要记住:这些只是“默认值”,实际生产环境中,管理员几乎都会改成自定义路径,所以想确认当前服务器的文档根目录,最可靠的办法不是猜,而是查配置文件。
宝塔面板设置网站根目录在哪里
国内用户大量使用宝塔面板(BT Panel),在宝塔中,文档根目录被称为“网站目录”,登录面板后,点击“网站”菜单,找到对应站点,点击“设置”,在弹出的面板中“网站目录”标签页就能看到当前路径。
- 默认情况下,宝塔会把站点文件放在
/www/wwwroot/域名下。 - 修改时,直接输入新路径,比如
/www/wwwroot/example.com/public,然后保存。 - 宝塔会提示是否同步修改Nginx配置文件中的
root项,建议保持同步,否则配置不生效。
很多用户问“宝塔面板设置网站根目录在哪里”,其实就在这个设置面板里,注意,同时还要修改“伪静态”和“默认文档”配置,否则框架类程序可能无法路由。
如何正确修改和配置文档根目录
修改文档根目录是运维中的高频操作,比如上线新版本、把站点切换为子目录部署,或者修复路径错误,这里给出Nginx和Apache的完整流程。
Nginx 下修改文档根目录的完整步骤
以CentOS系统为例,Nginx的站点配置通常位于

/etc/nginx/conf.d/或/etc/nginx/sites-available/,操作过程如下:
- 打开站点配置文件,例如
vim /etc/nginx/conf.d/example.conf。 - 找到
server块内的root指令,将其值修改为目标路径,server { listen 80; server_name example.com; root /var/www/example/public; index index.php index.html; } - 检查PHP分离时的
fastcgi_param SCRIPT_FILENAME,确保它也指向新路径,否则PHP文件会执行失败。 - 保存文件后,先执行
nginx -t验证语法。 - 再执行
systemctl reload nginx重载配置。
如果站点使用了HTTPS,还要检查server块中对应80和443的配置,避免只改了一处,业内专家指出,Nginx配置里最常见的错误就是修改了root却忘记同步给location ~ .php$块内的fastcgi_param。
Apache 下修改文档根目录的注意事项
Apache的配置逻辑与Nginx相似,但指令名不同,在httpd.conf或虚拟主机配置文件中,使用DocumentRoot指令:
<VirtualHost :80>
ServerName example.com
DocumentRoot /var/www/html/example/public
<Directory "/var/www/html/example/public">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Apache的特殊之处在于:必须同步修改<Directory>指令的路径,如果只改DocumentRoot,而<Directory>仍指向旧路径,Apache会拒绝访问新目录并返回403,启用.htaccess时,AllowOverride All才能让目录下的重写规则生效,这也是很多WordPress用户伪静态失效的原因。
配置错误会带来哪些访问问题
修改后的路径如果写错,常见现象包括:
- 403 Forbidden:因为新目录没有挂载到配置中,或目录权限不足。
- 404 Not Found:因为路径拼写错误,或
index指令没配对。 - 500 Internal Server Error:多出现在PHP-FPM配置中,新路径下的socket或权限配置不匹配。
- 样式和图片全部丢失:因为前端资源用绝对路径访问,而文档根目录变更后,资源路径也失效。
遇到这些情况,建议先看错误日志,Nginx的日志在/var/log/nginx/error.log,Apache的日志在/var/log/httpd/error_log(RHEL系)或/var/log/apache2/error.log(Debian系),日志内容会精准指出问题所在。

安全与性能:别让文档根目录成为漏洞入口
文档根目录决定了一个站点暴露给访客的“面积”,配置不当轻则目录遍历,重则源码泄露。
权限设置和目录遍历防护
行业共识认为,文档根目录本身的权限应为755,其中的文件用644,可执行脚本可放宽到755,但文件夹不应当允许777,在Nginx中,关闭目录遍历的配置是:
location / {
autoindex off;
}
Apache中,则使用:
Options -Indexes
不要在文档根目录放置备份文件、.sql文件或隐藏的.git目录,许多攻击者专门扫描/.git/config来获取源码,如果必须存放备份,应该放在文档根目录之外。
如何用文档根目录隔离多个站点
一台服务器上部署多个站点时,最好为每个站点建立独立的文档根目录,不要胡乱嵌套,推荐的目录结构是:
/data/www/site1/data/www/site2/data/logs/site1/data/logs/site2
把日志和网页文件分开目录存放,既能防止日志占用磁盘导致站点异常,又能避免日志文件被直接下载,如果你是使用低成本虚拟主机或云服务器建站,更要注意这一点,因为共享环境下目录结构混乱容易引发跨站问题。
常见问题解答
文档根目录和网站根目录怎么区分?
在简单静态站点中,二者完全相同,在使用框架开发的项目中,文档根目录通常指向项目的public子目录,而网站根目录是项目根目录,例如Laravel的结构下,文档根目录是/var/www/example/public,网站根目录是/var/www/example/。
修改文档根目录后网站打不开怎么办?
先检查配置文件的语法是否正确,Nginx执行nginx -t,Apache执行apachectl -t,再查看错误日志,确认路径是否存在以及权限是否可读,如果使用PHP,还需要核对PHP-FPM的listen配置和SCRIPT_FILENAME路径,另一个常见原因是SELinux未关闭或未设置文件上下文,导致Web进程被拦截,尤其是CentOS系统上,执行restorecon -R /var/www/html可解决部分权限困扰。
一台服务器能设置多个文档根目录吗?
可以,通过虚拟主机或server块,每个域名或端口都可以指定独立的文档根目录,相同域名下也可以通过location或Directory指令为不同URL路径分派不同目录,但要注意配置匹配优先级,避免相互覆盖。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/860783.html


评论列表(5条)
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是网站目录部分,给了我很多新的思路。感谢分享这么好的内容!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于网站目录的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是网站目录部分,给了我很多新的思路。感谢分享这么好的内容!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于网站目录的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于网站目录的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!