In che modo WordPress crea URL di cui Apache è a conoscenza?


17

Quando crei una pagina in WordPress, è solo una voce in una tabella del database; non esiste un file effettivo in quella posizione. Tuttavia, posso creare un file in quella posizione e rubare la pagina da WordPress. Elimina il file e torna senza problemi alla pagina di WordPress.

Sono solo curioso di sapere come questo è ottenuto. Presumibilmente si sta verificando una comunicazione tra WordPress e Apache (?).

Risposte:


27

In realtà non c'è comunicazione tra Apache e WordPress. La "magia" sta accadendo in Apachemod_rewrite regole di .

Per un'installazione standard di WordPress, hai le seguenti regole in .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

Nota questa riga: RewriteRule . /index.php [L] qui, stiamo dicendo ad Apache di reindirizzare internamente qualsiasi richiesta URL a /index.php.

A meno che: questa riga:RewriteCond %{REQUEST_FILENAME} !-fdiventi falsa. Ciò significa che, aggiungendo questoRewriteCondcon quanto sopraRewriteRule, stiamo dicendo ad Apache di inviare tutte le richieste/index.php, ma non se si tratta di un file esistente .

Inoltre, quando questa riga:RewriteCond %{REQUEST_FILENAME} !-ddiventa falsa. Ciò significa che, aggiungendo questoRewriteCondcon quanto sopraRewriteRule, stiamo dicendo ad Apache di inviare tutte le richieste a/index.php, ma non se si tratta di una directory esistente .

Quindi alla fine, a meno che non sia un file esistente o una directory esistente, Apache sta inviando internamente tutte le altre richieste a /index.php .

Come vedi, non sta avvenendo alcuna comunicazione tra Apache e WordPress. Apache sta decidendo tutto da solo e gli stiamo dicendo di farlo usando RewriteRuleeRewriteCond direttive.

Leggi di più mod_rewriteQUI .


3
Questo è fantastico Ho capito perfettamente. Ho esaminato il file .htaccess predefinito molte volte e non mi sono mai preso la briga di analizzarlo. Grazie!
Matt,

Questo è un modello di progettazione chiamato front controller. Nota che reindirizza tutti gli URL inesistenti a index.php, questo significa che se scrivi il percorso completo del tuo file Functions.php, il frontcontroller non funzionerà e il sito Web servirà funzioni.php. Questo è il motivo per cui vedrai spesso il plugin WordPress e i file dei temi che iniziano conif ( !defined(‘ABSPATH’)) exit;
Sjors Ottjes,

Sì, l'ho visto nei plugin ma non ne ho capito lo scopo. Quindi, se !defined(‘ABSPATH’)restituisce true, significa che qualcosa di diverso da WordPress sta tentando di accedere allo script (perché ABSPATH è definito in wp-config.php), e quindi dovrebbe ignorare quella richiesta. È corretto?
Matt,

@matt È corretto. Anche se non direi "qualcosa di diverso da WordPress". Perché puoi definire anche ABSPATHin qualsiasi altro script PHP, quindi consentirà altri script sul tuo server. Ciò che non consentirà è l'accesso diretto a quel file dall'esterno del server (ad esempio dal browser). Perché accedendo direttamente a quel file, gli utenti non sono in grado di definire ABSPATH.
Fayaz,

Questo è davvero fantastico da sapere. Mi preoccupo costantemente della sicurezza e potrò approfittarne immediatamente. Grazie!
Matt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.