2009-08-11 6 views
2

J'ai eu le plaisir de prendre un pic au code source Wordpress; Je me demandais comment ils ont géré la fonction d'URL personnalisée, mais je ne pouvais pas vraiment l'obtenir. Les règles de réécriture à l'intérieur du fichier wordpress .htaccess redirigent simplement toutes les demandes vers index.php.Wordpress "moteur de recherche convivial" urls (permaliens) la mise en œuvre

Après cela, il est un mystère pour moi: comment ils font example.com/this/title/is/cool/ match de index.php?p=233 ?

Répondre

3

Une fois qu'il est redirigé vers index.php, ce fichier peut regarder $_SERVER['REQUEST_URI'] pour déterminer ce qui est dans la partie this/title/is/cool, puis aller recherchez la page à diffuser à partir d'une base de données, car le champ REQUEST_URI répertorie la chaîne d'URI complète, même si l'URL de page réelle qui a été redirigée n'est que la première partie de celle-ci.

Par exemple,

http://www.example.com/foo/bar/ 

est réécrite à

http://www.example.com/index.php/foo/bar/ 

Cela se traduira effectivement en http://www.example.com/index.php en cours de chargement, mais $_SERVER['REQUEST_URI'] aura la pleine /index.php/foo/bar/ en son sein.

Certaines applications utilisent une approche différente, ils utilisent .htaccess pour ne prendre que les traînants « répertoires » et les mettre dans la chaîne de requête, de sorte que la réécriture devient quelque chose comme ceci:

http://www.example.com/index.php?path=/foo/bar/ 

auquel cas la Le chemin fourni est disponible en _GET['path'].

+0

Merci! J'ai pensé que cela pourrait être quelque chose comme ça, mais je l'ai nié car je pensais que personne ne peut être certain que les variables de serveur sont disponibles partout. $ _SERVER ['REQUEST_URI'] est une variable fiable, présente sur toutes les configurations? – pixeline

+0

'$ _SERVER ['REQUEST_URI']' ne contient pas l'URI complet, mais seulement le chemin URI et la requête. – Gumbo

+0

Merci Gumbo. Édité. – Amber