Comment WordPress crée-t-il des URL connues d'Apache?

16

Lorsque vous créez une page dans WordPress, il ne s'agit que d'une entrée dans une table de base de données. il n'y a pas de fichier réel à cet endroit. Cependant, je peux créer moi-même un fichier à cet endroit et cela détournera la page de WordPress. Je supprime le fichier et il retourne de manière transparente à la page WordPress.

Je suis simplement curieux de savoir comment cela est réalisé. Vraisemblablement, des communications ont lieu entre WordPress et Apache (?).

    
posée Matt 18.02.2017 - 15:08

1 réponse

27

En réalité, il n’ya pas de communication entre Apache et WordPress. La "magie" se produit dans les règles Apache mod_rewrite .

Pour une installation standard de WordPress, vous avez les règles suivantes dans .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

Notez cette ligne: RewriteRule . /index.php [L] Ici, nous demandons à Apache de rediriger en interne toute demande d’URL vers /index.php .

Sauf si: cette ligne: RewriteCond %{REQUEST_FILENAME} !-f devient false. Cela signifie qu'en ajoutant ce RewriteCond au susdit RewriteRule , nous demandons à Apache d'envoyer toutes les requêtes à /index.php , mais pas s'il s'agit d'un fichier existant .

De même, lorsque cette ligne: RewriteCond %{REQUEST_FILENAME} !-d devient false. Cela signifie qu'en ajoutant ce RewriteCond au susdit RewriteRule , nous demandons à Apache d'envoyer toute demande à /index.php , mais pas s'il s'agit d'un répertoire existant .

Donc, à la fin, à moins qu'il s'agisse d'un fichier existant ou d'un répertoire existant, Apache envoie en interne toutes les autres demandes à /index.php .

Comme vous le voyez, aucune communication n’est établie entre Apache & WordPress. Apache décide de tout lui-même et nous lui disons de le faire en utilisant les directives RewriteRule et RewriteCond .

En savoir plus sur mod_rewrite ICI .

    
réponse donnée Fayaz 18.02.2017 - 15:21

Lire d'autres questions sur les étiquettes