Wie erstellt WordPress URLs, die Apache kennt?

17

Wenn Sie eine Seite in WordPress erstellen, ist dies nur ein Eintrag in einer Datenbanktabelle. An diesem Speicherort befindet sich keine aktuelle Datei. Ich kann jedoch eine Datei an diesem Ort selbst erstellen und sie wird die Seite von WordPress stehlen. Ich lösche die Datei und sie kehrt nahtlos zur WordPress-Seite zurück.

Ich bin nur neugierig, wie dies erreicht wird. Vermutlich findet eine gewisse Kommunikation zwischen WordPress und Apache (?) Statt.

Matt
quelle

Antworten:

27

Momentan findet keine Kommunikation zwischen Apache und WordPress statt. Die "Magie" geschieht in Apache- mod_rewriteRegeln.

Für eine Standard-WordPress-Installation gelten folgende Regeln .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

Beachten Sie diese Zeile: RewriteRule . /index.php [L] Hier weisen wir Apache an, URL-Anfragen intern an umzuleiten /index.php.

Es sei denn, diese ZeileRewriteCond %{REQUEST_FILENAME} !-fwird falsch. Das heißt, mitHinzufügen diesesRewriteCondmit der obenRewriteRule, wir sagen Apache alle Anfragen zu senden/index.php, aber nicht , wenn es eine vorhandene Datei ist .

Auch wenn diese Zeile:RewriteCond %{REQUEST_FILENAME} !-dfalse wird. Das heißt, mitHinzufügen diesesRewriteCondmit dem obenRewriteRule, wir sagen Apache alle Anfragen zu senden/index.php, aber nicht , wenn es sich um ein bestehendes Verzeichnis ist .

Letztendlich sendet Apache alle anderen Anfragen intern an, es sei denn, es handelt sich um eine vorhandene Datei oder ein vorhandenes Verzeichnis /index.php.

Wie Sie sehen, findet keine Kommunikation zwischen Apache und WordPress statt. Apache entscheidet alles selbst und wir weisen es an, dies mit RewriteRuleund RewriteCondAnweisungen zu tun .

Lesen Sie mehr über mod_rewriteHIER .

Fayaz
quelle
3
Das ist toll. Ich verstehe vollkommen. Ich habe mir die standardmäßige .htaccess-Datei oft angesehen und mich nie darum gekümmert, sie zu analysieren. Vielen Dank!
Matt
Dies ist ein Entwurfsmuster, das als Front-Controller bezeichnet wird. Beachten Sie, dass alle nicht vorhandenen URLs zu index.php umgeleitet werden. Dies bedeutet, dass der Frontcontroller nicht funktioniert und die Website functions.php bereitstellt, wenn Sie den vollständigen Pfad zu Ihrer Datei functions.php eingeben. Aus diesem Grund werden Sie häufig sehen, dass WordPress-Plugins und if ( !defined(‘ABSPATH’)) exit;
Themendateien
Ja, ich habe das in Plugins gesehen, aber seinen Zweck nicht verstanden. Wenn !defined(‘ABSPATH’)der Wert true ist, bedeutet dies, dass WordPress versucht, auf das Skript zuzugreifen (da ABSPATH in der Datei wp-config.php definiert ist). Daher sollte es diese Anforderung ignorieren. Ist das korrekt?
Matt
@matt Das stimmt. Obwohl ich das nicht "etwas anderes als WordPress" sagen würde. Da Sie auch ABSPATHin jedem anderen PHP-Skript definieren können, werden andere Skripte auf Ihrem eigenen Server zugelassen. Was es nicht zulässt, ist der direkte Zugriff auf diese Datei von außerhalb Ihres Servers (etwa vom Browser). Denn durch den direkten Zugriff auf diese Datei können Benutzer in keiner Weise definieren ABSPATH.
Fayaz
Das ist wirklich toll zu wissen. Ich mache mir ständig Sorgen um die Sicherheit und kann dies sofort nutzen. Vielen Dank!
Matt