Dokumentasi / Menerbitkan dari folder selain public_html

Menerbitkan dari folder selain public_html

Secara bawaan sebuah domain menerbitkan public_html di direktori rumah Anda. Kerangka kerja PHP modern dirancang sebaliknya: seluruh aplikasi berada di satu folder dan hanya subfolder public/ di dalamnya yang boleh dijangkau dari web. Berkas .env — sandi basis data, kunci aplikasi, kredensial pembayaran — berada satu tingkat di atasnya, dan itu disengaja.

Kalau Anda menerbitkan seluruh proyek, /.env menjadi URL yang bisa diminta siapa pun. Memilih akar dokumen adalah cara menghindarinya.

Mengaturnya

Domain → baris domainnya → Document root.

Anda diminta mengisi folder di dalam direktori rumah Anda, ditulis relatif terhadapnya:

app/public

bukan /home/anda/app/public. Kosongkan untuk kembali ke public_html.

Panel membuat foldernya bila belum ada, menulis ulang konfigurasi server web, dan memuat ulang. Setelah selesai, panel menyebutkan jalur lengkap yang kini diterbitkan, dan menyatakan secara terang kalau foldernya baru saja dibuatkan.

Susunan yang lazim setelahnya:

/home/anda/
├── app/            <- seluruh proyek: composer.json, .env, vendor/
│   └── public/     <- hanya bagian ini yang disajikan ke web
└── public_html/    <- bawaan, tidak dipakai lagi

Memastikan berhasil

Buka situsnya. Lalu minta berkas yang Anda lindungi:

curl -sI https://domainanda.com/.env

403 adalah jawaban yang Anda inginkan. 200 berarti akar dokumen masih berada di atas .env dan perubahannya belum berlaku — muat ulang halaman Domain dan pastikan barisnya menampilkan folder yang Anda ketik.

Domain mana saja yang punya pengaturan ini

  • Domain utama, addon domain, dan subdomain masing-masing punya akar dokumen sendiri dan tombol Document root sendiri.
  • Domain parkir (alias) tidak punya. Alias selalu menyajikan situs utama Anda — justru itulah yang membuatnya alias. Panel menyatakannya: "A parked domain always serves your primary website. Change the primary document root instead, or convert this to an addon domain."
  • Pengalihan (redirect) tidak punya. Pengalihan tidak menyajikan apa pun miliknya sendiri.

Apa yang ditolak panel, dan kenapa

Nilainya diperiksa sebelum sampai ke proses mana pun yang berhak istimewa, lalu diperiksa lagi di sisi seberang. Penolakan muncul sebagai pesan di halaman, dan tidak ada yang diubah.

Yang Anda ketik Kenapa ditolak
/var/www/html, ~/app Harus relatif terhadap rumah Anda. Jalur absolut dan ~ tidak diterima.
../../etc, app/../.. Nama folder tidak boleh diawali titik — aturan itulah yang membuat .. mustahil. Tak ada apa pun di luar rumah Anda yang bisa dijangkau.
.ssh, .git, .config Aturan yang sama. Menerbitkan .ssh berarti menaruh kunci Anda di web; menerbitkan .git berarti menaruh riwayat kode Anda di sana.
tmp Berkas sesi PHP Anda ada di situ. Menerbitkannya sama dengan menerbitkan sesi para pengunjung Anda.
logs, etc, mail, ssl, backups Dipakai panel untuk akun Anda.
a/b/c/d/e Paling dalam empat tingkat.
lebih dari 128 karakter Terlalu panjang.

Satu pemeriksaan lagi terjadi di server itu sendiri: foldernya ditelusuri melewati tautan simbolik lalu diperiksa ulang. Symlink yang menunjuk ke luar rumah Anda ditolak, bukan diikuti — jadi ln -s / ~/app tidak berubah menjadi sistem berkas yang disajikan.

Sertifikat

Tak ada yang perlu dikerjakan. Sertifikat diterbitkan untuk domain, bukan untuk folder, dan akar dokumen yang Anda atur dibaca ulang tepat saat sertifikat ditulis — jadi mengubahnya sementara HTTPS sedang disiapkan tetap aman. Addon domain yang sudah punya HTTPS tetap memilikinya.

Kalau ada yang tampak salah

Situs menampilkan daftar isi folder atau "index of /". Folder barunya belum berisi index.php atau index.html. Unggah aplikasinya, atau arahkan akar dokumen ke folder yang memang punya berkas itu.

403 di semua halaman, bukan hanya di .env. Foldernya ada, tetapi server web tak bisa membacanya. Periksa lewat Pengelola Berkas bahwa folder itu dan folder induknya milik akun Anda — terutama kalau berkasnya Anda taruh lewat SSH sebagai pengguna lain.

404 di semua halaman padahal semenit lalu masih jalan. Muat ulang halaman Domain dan baca folder yang tertera di barisnya. Salah ketik diterbitkan persis seperti diketik — panel membuat foldernya alih-alih menebak, jadi folder baru yang kosong adalah penyebab yang paling sering. Kembalikan ke public_html, atau ke folder yang benar.

Semua halaman menjawab 500 dengan galat kerangka kerja soal kunci yang hilang. Itu aplikasinya, bukan akar dokumennya — kerangka kerjanya justru sudah terjangkau. Pada Laravel biasanya APP_KEY yang masih kosong.