关于$_SERVER['DOCUMENT_ROOT']返回值的技术疑问
关于$_SERVER['DOCUMENT_ROOT']在子域名环境下的取值说明
不用纠结问题基础,新手碰到这种配置细节疑问太正常啦😉
首先给你明确结论:$_SERVER['DOCUMENT_ROOT']并不会始终返回服务器的系统根目录,它的取值完全由Web服务器(比如Apache、Nginx)的配置决定,对应当前请求的站点(包括子域名站点)的文档根路径。
举个实际场景帮你理解:
- 假设你的主域名
example.com在服务器上的站点根目录是/var/www/example,服务器配置里把这个路径设为主域名的文档根; - 同时你给子域名
sub.example.com配置了独立站点,指向服务器上的/var/www/sub文件夹,并且将这个路径设为该子域名站点的文档根;
那么当你访问sub.example.com下的PHP脚本时,$_SERVER['DOCUMENT_ROOT']返回的就是/var/www/sub,既不是主域名的/var/www/example,更不是服务器的系统根目录/。
之所以这个变量叫DOCUMENT_ROOT而非SERVER_ROOT,核心原因就是它指向的是当前请求对应的站点用来存放网页文档的根目录——这个站点可以是主域名,也可以是子域名,完全取决于服务器为每个站点配置的文档根路径。
再整理成更清晰的要点:
- 每个站点(包括子域名站点)都可以在服务器配置中设置专属的文档根:Apache用
DocumentRoot指令,Nginx用root指令; $_SERVER['DOCUMENT_ROOT']的值就是当前请求所属站点的这个配置值;- 它和服务器的系统根目录没有直接关联,只和当前站点的配置绑定。
内容的提问来源于stack exchange,提问作者Afik Habaz
相关产品推荐
相关产品推荐

