W rzeczywistości nie ma komunikacji między Apache a WordPress. „Magia” dzieje się w mod_rewrite
regułach Apache .
W przypadku standardowej instalacji WordPress obowiązują następujące zasady .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
Zwróć uwagę na ten wiersz: RewriteRule . /index.php [L]
tutaj mówimy Apache, aby wewnętrznie przekierowywał każde żądanie adresu URL /index.php
.
Chyba że: ta linia:RewriteCond %{REQUEST_FILENAME} !-f
staje się fałszywa. Oznacza to, że dodając toRewriteCond
do powyższegoRewriteRule
, mówimy Apache, aby wysłał wszystkie żądania/index.php
, ale nie, jeśli jest to istniejący plik .
Również, gdy ta linia:RewriteCond %{REQUEST_FILENAME} !-d
staje się fałszem. Oznacza to, że dodając toRewriteCond
do powyższegoRewriteRule
, mówimy Apache, aby wysłał wszystkie żądania do/index.php
, ale nie, jeśli jest to istniejący katalog .
Tak więc ostatecznie, chyba że jest to istniejący plik lub katalog, Apache wewnętrznie wysyła wszystkie pozostałe żądania do /index.php
.
Jak widać, nie ma komunikacji między Apache i WordPress. Apache sam decyduje o wszystkim, a my mówimy mu, żeby to robił, używając dyrektyw RewriteRule
i RewriteCond
dyrektyw.
Przeczytaj więcej o mod_rewrite
TUTAJ .
if ( !defined(‘ABSPATH’)) exit;
!defined(‘ABSPATH’)
ocenione jako prawda, oznacza to, że coś innego niż WordPress próbuje uzyskać dostęp do skryptu (ponieważ ABSPATH jest zdefiniowane w wp-config.php), a zatem powinno zignorować to żądanie. Czy to jest poprawne?ABSPATH
w dowolnym innym skrypcie PHP, więc pozwoli on na inne skrypty na twoim serwerze. To, czego nie pozwoli, to bezpośredni dostęp do tego pliku spoza serwera (powiedzmy z przeglądarki). Ponieważ poprzez bezpośredni dostęp do tego pliku użytkownicy nie są w stanie zdefiniowaćABSPATH
.