刚买虚拟主机那会儿,网站我传了个 index.html 上去,目录浏览器里敲域名,网站页面出来了。目录但我不知道它到底躺在服务器的网站哪个角落。后来用 FTP 连上去,目录看到一堆文件夹,网站什么 wwwroot、目录public_html、网站htdocs,目录当场就懵了——到底哪个才算“根”?网站
这事其实没有统一答案。网站根目录的目录位置,取决于你用的网站什么服务器软件、什么面板、目录甚至什么操作系统。网站Apache 默认在 Linux 下是 /var/www/html,Debian 系尤其如此。但到了 CentOS,可能又变成 /var/www/html 和 /usr/share/httpd 两个地方打架。Nginx 呢?配置文件里 root 指令指向哪,哪就是根。常见的是 /usr/share/nginx/html,可你要是装了宝塔面板,它偏给你放到 /www/wwwroot/你的域名 下面。
我头一回用宝塔的时候,找了半天没找到网站文件。明明 FTP 登录进去看到根目录空空如也,后来才发现默认路径在 /www/wwwroot,而 FTP 账户被限制在了用户主目录里。这就是个坑——你以为的根,和服务器以为的根,压根不是一回事。
Windows 服务器又是另一套逻辑。IIS 里叫“物理路径”,通常挂在 C:\inetpub\wwwroot。你要是用 PHPStudy 或者 XAMPP 这种集成环境,根目录就跑到安装盘符下的 htdocs 或者 www 文件夹里。XAMPP 在 Windows 上默认是 C:\xampp\htdocs,Mac 上则是 /Applications/XAMPP/htdocs。看,连同一个软件换个系统都变。
那怎么确定自己网站的根目录?最笨也最有效的办法:写个 PHP 文件,内容就一行 <?php echo __DIR__; ?>,扔到网站能访问的地方,浏览器打开它。输出的路径就是当前文件所在目录。如果这个文件你放在网站入口,那它就是根目录。或者更直接,看服务器配置文件。Apache 找 DocumentRoot,Nginx 找 root,IIS 看站点绑定里的物理路径。
虚拟主机用户通常没权限看配置文件。这时候只能靠面板或者问客服。cPanel 里根目录一般是 public_html,Plesk 可能是 httpdocs。我见过一个朋友,把文件传到 www 文件夹里,结果网站死活不显示,因为他的主机根目录其实是 public_html,www 只是个软链接或者干脆是摆设。
还有个容易混淆的概念:网站根目录和服务器根目录。服务器根目录是 /,整个文件系统的起点。网站根目录只是服务器上某个文件夹,通过 Web 服务器软件映射成一个 URL 路径。你访问 https://example.com/images/logo.png,Web 服务器会去网站根目录下的 images 文件夹里找 logo.png。这个映射关系由配置文件决定,不是物理上必须叫“根”。
我以前图省事,把网站根目录设成 /,想着这样访问文件方便。结果 Nginx 直接报 403,权限不够。就算权限给了,那也是自杀式操作——整个服务器文件系统暴露在 Web 下,跟把家门钥匙插在门上没区别。
所以每次接手新服务器,我第一件事就是确认三样东西:Web 服务器软件是什么、配置文件里 root 或 DocumentRoot 指向哪、当前用户对这个目录有没有读写权限。这三样搞清楚了,根目录在哪自然就清楚了。剩下的,无非是把文件放对地方,然后祈祷别打错字。