WordPress, Apache'nin bildiği URL'leri nasıl oluşturur?


17

WordPress'de bir sayfa oluşturduğunuzda, bu yalnızca bir veritabanı tablosundaki bir girdidir; bu konumda gerçek bir dosya yok. Ancak bu konumda kendim bir dosya oluşturabilirim ve sayfayı WordPress'ten çalacaktır. Dosyayı siliyorum ve sorunsuz bir şekilde WordPress sayfasına geri dönüyor.

Sadece bunun nasıl yapıldığını merak ediyorum. Muhtemelen WordPress ve Apache (?) Arasında bir iletişim oluyor.

Yanıtlar:


27

Aslında Apache ve WordPress arasında iletişim yok. "Büyü" Apache mod_rewritekurallarında oluyor .

Standart bir WordPress kurulumu için aşağıdaki kurallara sahipsiniz .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

Bu satıra dikkat edin: RewriteRule . /index.php [L] Burada, Apache'ye herhangi bir URL isteğini dahili olarak yönlendirmesini söylüyoruz /index.php.

Tabii: bu satır:RewriteCond %{REQUEST_FILENAME} !-fyanlış olur. BuRewriteCond, yukarıdakileriekleyerekRewriteRuleApache'ye tüm istekleri göndermesini söylüyoruz/index.php, ancak varolan bir dosya değilse .

Ayrıca, bu satır:RewriteCond %{REQUEST_FILENAME} !-dyanlış olur. BuRewriteCond, yukarıdaki ilebirlikte ekleyerekRewriteRule, Apache'ye tüm isteği göndermesini söylüyoruz/index.php, ancak mevcut bir dizinse değil .

Sonuç olarak, varolan bir dosya veya mevcut bir dizin olmadığı sürece Apache dahili olarak diğer tüm istekleri gönderiyor /index.php.

Gördüğünüz gibi Apache ve WordPress arasında hiçbir iletişim yok. Apache her şeye kendisi karar veriyor ve biz de bunu kullanarak RewriteRuleve RewriteConddirektifleri yapmasını söylüyoruz .

mod_rewriteHERE hakkında daha fazla bilgi edinin .


3
Bu harika. Mükemmel anlıyorum. Varsayılan .htaccess dosyasına birçok kez baktım ve analiz etmek için hiç uğraşmadım. Teşekkür ederim!
Matt

Bu, ön kontrolör adı verilen bir tasarım modelidir. Varolmayan tüm URL'leri index.php'ye yönlendirdiğini unutmayın; bu, işlevler.php dosyanızın tam yolunu yazarsanız, ön denetleyicinin çalışmadığı ve web sitesinin function.php işlevini sunacağı anlamına gelir. Bu nedenle sık sık WordPress eklentisi ve tema dosyalarının başladığını if ( !defined(‘ABSPATH’)) exit;
göreceksiniz

Evet bunu eklentilerde gördüm ama amacını anlamadım. Bu nedenle, !defined(‘ABSPATH’)doğru olarak değerlendirilirse, WordPress dışında bir şey komut dosyasına erişmeye çalıştığı anlamına gelir (çünkü ABSPATH wp-config.php'de tanımlanır) ve bu nedenle bu isteği yok saymalıdır. Bu doğru mu?
Matt

@matt Doğru. "WordPress dışında bir şey" demememe rağmen. ABSPATHBaşka bir PHP betiğinde de tanımlayabileceğiniz için kendi sunucunuzdaki diğer komut dosyalarına izin verir. İzin vermeyeceği şey, o dosyanın sunucunuzun dışından doğrudan erişilmesidir (tarayıcıdan söyleyin). Çünkü bu dosyaya doğrudan erişerek kullanıcılar hiçbir şekilde tanımlayamazlar ABSPATH.
Fayaz

Bunu bilmek gerçekten harika. Güvenlik konusunda sürekli endişeleniyorum ve bundan hemen yararlanabiliyorum. Teşekkür ederim!
Matt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.