Bagaimana WordPress membuat URL yang diketahui Apache?

17

Saat Anda membuat halaman di WordPress, itu hanya sebuah entri dalam tabel database; tidak ada file aktual di lokasi itu. Namun saya dapat membuat file di lokasi itu sendiri dan itu akan mencuri halaman dari WordPress. Saya menghapus file dan secara mulus kembali ke halaman WordPress.

Saya hanya ingin tahu tentang bagaimana ini dicapai. Agaknya beberapa komunikasi terjadi antara WordPress dan Apache (?).

Mat
sumber

Jawaban:

27

Sebenarnya tidak ada komunikasi yang terjadi antara Apache dan WordPress. "Sihir" itu terjadi dalam mod_rewriteaturan Apache .

Untuk instalasi WordPress standar, Anda memiliki aturan berikut di .htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Perhatikan baris ini: RewriteRule . /index.php [L] Di sini, kami memberi tahu Apache untuk mengalihkan secara internal setiap permintaan URL /index.php.

Kecuali: baris ini:RewriteCond %{REQUEST_FILENAME} !-fmenjadi salah. Itu berarti, dengan menambahkan iniRewriteConddengan yang di atasRewriteRule, kami memberi tahu Apache untuk mengirim semua permintaan/index.php, tetapi tidak jika itu adalah file yang sudah ada .

Juga, ketika baris ini:RewriteCond %{REQUEST_FILENAME} !-dmenjadi salah. Itu berarti, dengan menambahkan iniRewriteConddengan yang di atasRewriteRule, kami memberi tahu Apache untuk mengirim semua permintaan/index.php, tetapi tidak jika itu adalah direktori yang ada .

Jadi pada akhirnya, kecuali itu file yang sudah ada atau direktori yang ada, Apache secara internal mengirimkan semua permintaan lainnya /index.php.

Jadi seperti yang Anda lihat, tidak ada komunikasi yang terjadi antara Apache & WordPress. Apache memutuskan semuanya sendiri dan kami menyuruhnya menggunakan RewriteRuledan RewriteCondmengarahkannya.

Baca lebih lanjut tentang mod_rewriteDI SINI .

Fayaz
sumber
3
Ini bagus. Saya mengerti dengan sempurna. Saya telah melihat file .htaccess default berkali-kali dan tidak pernah repot untuk menganalisisnya. Terima kasih!
Matt
Ini adalah pola desain yang disebut pengontrol depan. Perhatikan bahwa pengalihan semua url yang tidak ada ke index.php, ini berarti bahwa jika Anda mengetikkan path lengkap ke file functions.php Anda, frontcontroller tidak akan berfungsi dan situs web akan melayani functions.php. Inilah sebabnya mengapa Anda akan sering melihat plugin WordPress dan file tema dimulai denganif ( !defined(‘ABSPATH’)) exit;
Sjors Ottjes
Ya saya pernah melihat itu di plugin tetapi tidak mengerti tujuannya. Jadi, jika !defined(‘ABSPATH’)dievaluasi benar, itu berarti sesuatu selain WordPress sedang mencoba mengakses skrip (karena ABSPATH didefinisikan dalam wp-config.php), dan karena itu harus mengabaikan permintaan itu. Apakah itu benar?
Mat
@ Matt Itu benar. Meskipun saya tidak akan mengatakan itu "sesuatu selain WordPress". Karena Anda dapat mendefinisikan ABSPATHdalam skrip PHP lain juga, jadi skrip lain akan dibolehkan di server Anda sendiri. Apa yang tidak akan diizinkan adalah akses langsung file itu dari luar server Anda (katakanlah dari browser). Karena dengan mengakses file itu secara langsung, pengguna sama sekali tidak dapat mendefinisikan ABSPATH.
Fayaz
Ini sangat bagus untuk diketahui. Saya terus-menerus khawatir tentang keamanan dan saya akan dapat memanfaatkan ini segera. Terima kasih!
Mat