Cara Mengatasi WordPress 404 di Subdirectory Di Nginx dan aaPanel – Punya dua instalasi WordPress dalam satu domain adalah setup yang cukup umum — misalnya WordPress utama sebagai landing page di domain.com, dan WordPress kedua sebagai blog di domain.com/blog.
Tapi ada jebakan yang sering di alami: setelah install WordPress kedua di subdirectory, saat di akses malah muncul 404 Not Found. Artikel ini membahas penyebab dan solusinya, khususnya untuk server yang menggunakan Nginx melalui aaPanel.
Kenapa Bisa 404?
Penyebabnya bukan dari WordPress-nya sendiri, tapi dari konfigurasi Nginx. WordPress yang terpasang di root domain (/) punya rewrite rule default seperti ini:
location / {
try_files $uri $uri/ /index.php?$args;
}Rule ini menangkap semua request yang masuk ke domain, termasuk /blog. Jadi ketika kamu akses domain.com/blog, Nginx malah meneruskannya ke WordPress root — dan karena WordPress root tidak tahu soal /blog, hasilnya 404.
Solusi: Tambah Location Block untuk Subdirectory
Solusinya adalah memberitahu Nginx bahwa /blog punya handler sendiri, dengan menambahkan location block khusus.
Langkah-langkahnya di aaPanel:
1. Masuk ke aaPanel → Website → klik nama domain → URL Rewrite 2. Tambahkan kode berikut di bagian rewrite:
# WordPress di /blog
location /blog {
try_files $uri $uri/ /blog/index.php?$args;
}
# Untuk REST API WordPress (wp-json)
location ~ ^/blog/wp-json/ {
rewrite ^/blog(/wp-json/.*)$ $1?$args last;
}3. Klik Save — Nginx akan otomatis reload konfigurasi. 4. Akses kembali domain.com/blog — seharusnya sudah bisa.
Penjelasan Singkat Tiap Baris
| Baris | Fungsi |
|---|---|
location /blog { ... } | Menangkap semua request ke /blog dan subdirektorinya |
try_files $uri $uri/ /blog/index.php?$args; | Coba cari file/folder asli dulu, kalau tidak ada lempar ke index.php WordPress |
location ~ ^/blog/wp-json/ { ... } | Khusus untuk REST API WordPress agar tidak konflik dengan rewrite di atasnya |
rewrite ^/blog(/wp-json/.*)$ $1?$args last; | Strip prefix /blog sebelum diteruskan ke WordPress |
Checklist
Tambahan
Selain konfigurasi Nginx, pastikan juga:
- WordPress Address (URL) di Settings → General diisi
https://domain.com/blog - Site Address (URL) juga diisi
https://domain.com/blog - Permalink di-flush — masuk Settings → Permalinks → klik Save Changes (tanpa ubah apapun)
- File WordPress benar-benar ada di folder
/blogdi dalam root domain
Kenapa Masalah Ini Tidak Muncul di Apache?
Di Apache, setiap folder bisa punya file .htaccess sendiri yang bersifat independen. WordPress akan otomatis membuat .htaccess di folder /blog saat permalink di-save, dan Apache akan membacanya. Nginx tidak mengenal .htaccess — semua konfigurasi harus di tulis langsung di server block. Makanya konfigurasi manual seperti di atas di perlukan.
Penutup
Setup dua WordPress dalam satu domain di Nginx memang butuh sedikit konfigurasi manual, tapi sebenarnya cukup simpel setelah paham alurnya. Kuncinya adalah menambahkan location block khusus untuk subdirectory sebelum location / yang sudah ada, sehingga Nginx tahu harus mengarahkan request /blog ke WordPress yang tepat. Semoga membantu!




