15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
09.10.2024

Apa Itu Direktori `www` dan `public_html` di Akun Hosting Anda?

Direktori `public_html` adalah document root dari website Anda — folder sisi server tempat web server Anda (Apache, Nginx, LiteSpeed) membaca dan menyajikan semua file yang dapat diakses publik ketika pengunjung memuat domain Anda. Direktori `www`, di sebagian besar lingkungan shared dan berbasis cPanel, hanyalah sebuah symbolic link (symlink) yang mengarah ke `public_html`, yang ada untuk kompatibilitas historis bukan sebagai lokasi penyimpanan independen.

Memahami perbedaan ini bukan sekadar kosmetik. Salah menempatkan file di luar `public_html`, salah mengonfigurasi document root, atau salah memahami hubungan symlink dapat mengakibatkan deployment yang rusak, error 403 Forbidden, atau paparan publik yang tidak disengaja terhadap file konfigurasi sensitif.

Peran `public_html` sebagai Document Root

Ketika permintaan HTTP mencapai server Anda, daemon web server berkonsultasi dengan konfigurasinya untuk menentukan direktori mana yang dipetakan ke domain yang diminta. Direktori tersebut disebut document root. Pada hampir semua lingkungan shared hosting dan sebagian besar konfigurasi VPS Hosting yang menjalankan cPanel atau panel kontrol serupa, document root tersebut adalah `public_html`.

Path absolut pada server cPanel tipikal terlihat seperti ini:

“`

/home/username/public_html/

“`

File apa pun yang ditempatkan di dalam direktori ini dapat diakses secara publik melalui domain Anda. Pemetaannya langsung:

Path File di ServerURL Publik
`/home/user/public_html/index.html``https://example.com/`
`/home/user/public_html/about.html``https://example.com/about.html`
`/home/user/public_html/images/logo.png``https://example.com/images/logo.png`
`/home/user/public_html/blog/post-1.php``https://example.com/blog/post-1.php`
`/home/user/secret-config.php` *(di luar public_html)*Tidak dapat diakses melalui browser

Baris terakhir itu sangat penting. File yang ditempatkan di atas `public_html` dalam pohon direktori — langsung di `/home/username/` — tidak terlihat oleh web server dan tidak dapat diambil melalui HTTP. Ini adalah lokasi yang tepat untuk file sensitif seperti kredensial database, file `.env`, dan API key yang dibaca aplikasi Anda saat runtime tetapi tidak boleh pernah disajikan secara publik.

File Index Default dan Resolusi Direktori

Ketika pengunjung meminta URL direktori (misalnya, `https://example.com/`), web server mencari file index default di direktori tersebut. Urutan resolusi standar dalam direktif `DirectoryIndex` Apache biasanya adalah:

“`

index.html > index.htm > index.php > index.cgi

“`

Jika tidak ada file-file ini yang ada dan directory listing tidak dinonaktifkan secara eksplisit, server mungkin mengembalikan 403 Forbidden atau mengekspos directory listing — risiko keamanan yang signifikan. Selalu pastikan file index yang valid ada atau `Options -Indexes` diatur dalam `.htaccess` Anda.

Apa Sebenarnya Direktori `www`

Direktori `www` adalah sebuah symbolic link POSIX, bukan direktori nyata dengan inode dan alokasi penyimpanannya sendiri. Anda dapat memverifikasi ini di server berbasis Linux mana pun:

“`bash

ls -la ~/

“`

Output akan menampilkan sesuatu seperti:

“`

lrwxrwxrwx 1 user user 10 Jan 15 09:22 www -> public_html

drwxr-xr-x 12 user user 4096 Jan 15 09:22 public_html

“`

`l` di awal string izin dan panah `-> public_html` mengonfirmasi bahwa itu adalah symlink. Ini berarti:

  • `www` dan `public_html` berbagi data inode yang persis sama
  • Menulis file ke `~/www/contact.html` identik dengan menulisnya ke `~/public_html/contact.html`
  • Menghapus `www` tidak menghapus `public_html` atau kontennya
  • Membuat ulang symlink sangat mudah: `ln -s ~/public_html ~/www`

Symlink `www` adalah artefak warisan dengan akar praktis. Dalam lingkungan hosting berbasis Unix awal, konvensinya adalah menyimpan konten web dalam direktori yang secara harfiah bernama `www` — mencerminkan awalan subdomain `www.` yang menjadi umum di tahun 1990-an. Ketika cPanel menstandarkan `public_html` sebagai nama document root, symlink `www` dipertahankan untuk menghindari kerusakan pada:

  • Skrip deployment lama yang dikodekan keras untuk menulis ke `~/www/`
  • Klien FTP dan manajer file yang mengharapkan folder `www`
  • Dokumentasi dan tutorial yang merujuk `www` sebagai target upload

Untuk semua tujuan praktis dalam lingkungan modern, Anda harus memperlakukan `public_html` sebagai lokasi kanonik dan mengabaikan `www` sepenuhnya.

`public_html` vs `www`: Perbandingan Langsung

Atribut`public_html``www`
TipeDirektori nyataSymbolic link
Adalah document root yang sebenarnyaYaTidak (mengarah ke `public_html`)
Berisi file secara independenYaTidak (berbagi inode `public_html`)
Dapat dihapus dengan amanTidak (merusak situs)Ya (situs terus berfungsi)
Tersedia di semua tipe hostingYaTidak dijamin
Target upload yang direkomendasikanYaTidak direkomendasikan
Ada di VPS/setup kustomDapat dikonfigurasiJarang, kecuali dibuat secara manual

Struktur Direktori di Dalam `public_html`

Direktori `public_html` yang terorganisir dengan baik memisahkan kepentingan dengan jelas. Berikut adalah struktur realistis untuk produksi pada situs berbasis PHP atau instalasi WordPress:

“`

public_html/

├── index.php

├── .htaccess

├── wp-config.php ← WordPress config (ideally moved one level up)

├── wp-content/

│ ├── themes/

│ ├── plugins/

│ └── uploads/

├── assets/

│ ├── css/

│ ├── js/

│ └── images/

└── sitemap.xml

“`

Catatan keamanan penting: `wp-config.php` berisi kredensial database. WordPress mendukung penempatan file ini satu direktori di atas `public_html` (`/home/username/wp-config.php`), di mana file tersebut tidak dapat dijangkau melalui HTTP tetapi masih dapat dibaca oleh PHP. Ini adalah praktik terbaik penguatan yang sering diabaikan oleh banyak administrator.

Bagaimana Subdomain dan Add-on Domain Memperluas Struktur Ini

Ketika Anda membuat subdomain atau add-on domain melalui VPS Control Panels atau cPanel, sistem hosting membuat document root baru — baik di dalam `public_html` atau sebagai direktori paralel pada level yang sama.

Document Root Subdomain

“`

/home/username/public_html/blog/ → blog.example.com

/home/username/public_html/shop/ → shop.example.com

“`

Atau, dalam beberapa konfigurasi cPanel:

“`

/home/username/blog.example.com/ → blog.example.com

“`

Document Root Add-on Domain

“`

/home/username/public_html/newdomain/ → newdomain.com

“`

Atau sebagai sibling tingkat atas:

“`

/home/username/newdomain.com/ → newdomain.com

“`

Path yang tepat bergantung pada konfigurasi panel hosting Anda. Selalu verifikasi document root di cPanel di bawah Domains > Subdomains atau Addon Domains untuk menghindari upload file ke lokasi yang salah.

Perbedaan Perilaku di Berbagai Lingkungan Hosting

Shared Hosting (cPanel)

Pada Shared Web Hosting dengan cPanel, strukturnya terstandarisasi:

  • Document root: `/home/username/public_html/`
  • Symlink `www`: tersedia secara default
  • Apache dengan dukungan `.htaccess`: diaktifkan
  • Beberapa domain: masing-masing mendapatkan subdirektori atau folder paralel sendiri

VPS dan Dedicated Server

Pada Dedicated Server atau VPS yang dikelola sendiri, document root sepenuhnya didefinisikan oleh administrator dalam konfigurasi web server. Konvensi umum:

Apache Virtual Host (`/etc/apache2/sites-available/example.com.conf`):

“`apache

<VirtualHost *:80>

ServerName example.com

ServerAlias www.example.com

DocumentRoot /var/www/example.com/public_html

</VirtualHost>

“`

Nginx Server Block (`/etc/nginx/sites-available/example.com`):

“`nginx

server {

listen 80;

server_name example.com www.example.com;

root /var/www/example.com/public_html;

index index.php index.html;

}

“`

Pada lingkungan ini, `public_html` adalah konvensi penamaan, bukan persyaratan teknis. Document root dapat diberi nama apa saja — `/var/www/html/`, `/srv/www/`, `/opt/app/public/` — selama konfigurasi web server mengarah ke sana. Symlink `www` biasanya tidak ada kecuali Anda membuatnya secara manual.

cPanel VPS

VPS dengan cPanel menggabungkan fleksibilitas VPS dengan struktur `public_html` terstandarisasi dari shared hosting, menjadikannya lingkungan paling umum di mana `www` dan `public_html` berdampingan persis seperti yang dijelaskan dalam artikel ini.

Izin File: Persyaratan yang Sering Diabaikan

Izin yang salah adalah salah satu penyebab paling umum dari error 403 Forbidden dan kegagalan deployment. Model izin standar untuk file yang dapat diakses web:

Sumber DayaIzin yang DirekomendasikanOktal
DirektoriBaca + Eksekusi untuk pemilik dan grup`755`
File PHP/HTMLBaca/Tulis untuk pemilik, Baca untuk lainnya`644`
File konfigurasi (`.env`, kredensial)Hanya pemilik`600`
Skrip yang dapat dieksekusiHanya eksekusi pemilik`700`

Atur izin secara rekursif dengan:

“`bash

find ~/public_html -type d -exec chmod 755 {} ;

find ~/public_html -type f -exec chmod 644 {} ;

“`

Jangan pernah mengatur `777` pada file atau direktori mana pun di lingkungan produksi. Ini memberikan akses tulis kepada semua pengguna sistem dan merupakan vektor langsung untuk kompromi server.

SSL, HTTPS, dan Document Root

Ketika Anda menginstal SSL Certificate pada domain Anda, sertifikat terikat pada nama domain, bukan pada direktori tertentu. Namun, konfigurasi virtual host HTTPS harus mengarah ke document root `public_html` yang sama dengan konfigurasi HTTP. Ketidakcocokan — di mana HTTP menyajikan dari satu direktori dan HTTPS dari direktori lain — menghasilkan perilaku tidak konsisten yang terkenal sulit didiagnosis.

Jika Anda menggunakan Let’s Encrypt melalui Certbot, proses verifikasi tantangan ACME menempatkan file sementara di `public_html/.well-known/acme-challenge/`. Pastikan path ini tidak diblokir oleh aturan `.htaccess` atau blok `location` Nginx yang menolak akses ke direktori tersembunyi (yang dimulai dengan `.`).

Daftar Periksa Poin Penting Praktis

Sebelum mengupload situs Anda:

  • Konfirmasi path document root yang tepat di panel hosting Anda — jangan berasumsi selalu `/home/username/public_html/`
  • Verifikasi `www` adalah symlink, bukan direktori terpisah, untuk menghindari manajemen file duplikat
  • Pindahkan file konfigurasi sensitif (`.env`, kredensial database) di atas `public_html`

Selama deployment:

  • Atur izin direktori ke `755` dan izin file ke `644`
  • Pastikan `index.html` atau `index.php` ada di document root untuk mencegah directory listing
  • Nonaktifkan `Options Indexes` di `.htaccess` sebagai tindakan pertahanan berlapis

Untuk setup multi-domain:

  • Konfirmasi document root untuk setiap subdomain dan add-on domain secara individual
  • Jangan berasumsi semua domain berbagi `public_html` yang sama

Pada lingkungan VPS dan dedicated:

  • Definisikan document root secara eksplisit dalam konfigurasi virtual host atau server block Anda
  • Symlink `www` tidak ada secara default — buat hanya jika skrip warisan memerlukannya
  • Restart web server setelah perubahan konfigurasi apa pun: `systemctl reload apache2` atau `systemctl reload nginx`

Untuk penguatan keamanan:

  • Jangan pernah menyimpan API key, file `.env`, atau konfigurasi database di dalam `public_html`
  • Audit `public_html` secara berkala untuk file yang tidak terduga, terutama di direktori `uploads/`
  • Pastikan virtual host SSL Anda mengarah ke document root yang sama dengan konfigurasi HTTP

Pertanyaan yang Sering Diajukan

Apa yang terjadi jika saya menghapus direktori `www`?

Jika `www` adalah symbolic link (yang memang demikian di hampir semua lingkungan cPanel), menghapusnya tidak berpengaruh pada website atau file Anda. Situs Anda terus berfungsi normal karena konten sebenarnya berada di `public_html`. Anda dapat membuat ulang symlink kapan saja dengan `ln -s ~/public_html ~/www`.

Bisakah saya mengganti nama `public_html` menjadi sesuatu yang lain?

Pada shared hosting, tidak — panel kontrol dikodekan keras untuk menggunakan `public_html` sebagai document root. Pada VPS atau dedicated server yang dikelola sendiri, Anda dapat memberi nama document root apa saja yang Anda inginkan, asalkan Anda memperbarui konfigurasi web server (`DocumentRoot` di Apache, `root` di Nginx) agar sesuai.

Mengapa saya mendapatkan error 403 Forbidden meskipun file saya ada di `public_html`?

Penyebab paling umum adalah izin file yang salah (file membutuhkan setidaknya `644`, direktori membutuhkan `755`), file index yang hilang dengan directory listing dinonaktifkan, atau aturan `.htaccess` yang memblokir akses. Periksa log error web server (`/var/log/apache2/error.log` atau `/var/log/nginx/error.log`) untuk alasan spesifiknya.

Di mana saya harus menyimpan file yang perlu dibaca PHP tetapi tidak boleh dapat diakses publik?

Tempatkan di direktori di atas `public_html`, seperti `/home/username/private/` atau langsung di `/home/username/`. PHP dapat membaca file di mana saja pada filesystem yang memiliki izin akses oleh pengguna web server, tetapi web server tidak akan menyajikan file di luar document root melalui HTTP.

Apakah subdomain `www` bekerja secara berbeda dari domain non-www di tingkat server?

Tidak. Baik `www.example.com` maupun `example.com` diarahkan ke document root yang sama melalui konfigurasi DNS dan pengaturan virtual host. Symlink direktori `www` pada filesystem tidak terkait dengan subdomain DNS `www.` — keduanya adalah konsep terpisah yang kebetulan berbagi tiga huruf yang sama.

15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai