L'URL du blog WordPress a cette notation. chapitre .php il y a un autre chemin. ce n'est pas un répertoire existant sur le serveur. Ma question est comment ils font cela? puis-je faire quelque chose comme ça sur mon simple PHP site Web?
blog/index.php/author/
Ce format d'URL spécifique, contenant index.php
(qui mappe vers un fichier physique), utilise les informations de chemin d'accès supplémentaires, c'est-à-dire. /author/
pour router la demande. Il ne nécessite aucune réécriture d'URL supplémentaire par le serveur.
Toutes les demandes sont traitées par le fichier /blog/index.php
(comme indiqué dans l'URL elle-même). Dans index.php
, vous pouvez ensuite référencer les informations de chemin d'accès à l'aide de PHP superglobal $_SERVER['PATH_INFO']
afin de décider de ce que vous allez faire avec la demande. Dans le cas de votre exemple d’URL, $_SERVER['PATH_INFO']
contient la chaîne /author/
(comme indiqué ci-dessus).
Pour que cela fonctionne, il faut que PATH INFO soit activé sur le serveur (sinon, sur Apache, cela déclencherait simplement un système généré par le système). Les informations de chemin sont activées par défaut pour le gestionnaire PHP.
puis-je faire quelque chose comme ça sur mon simple PHP site Web?
Oui. Cependant, la facilité d'implémentation sur un site existant et la possibilité d'améliorer la structure existante des URL sont un autre problème.
Si vous possédez vraiment un site statique dans lequel vous servez directement vos fichiers (c'est-à-dire que les URL mappent directement sur les chemins du système de fichiers, par exemple /blog/author.php
), l'implémentation de cette structure pourrait nécessiter une restructuration avec peu ou pas d'avantage à la structure d'URL elle-même.
Notez que ceci est différent d'une URL de la forme /blog/author/
(et non de l'absence de index.php
). Cela nécessiterait une réécriture d'URL supplémentaire sur le serveur.
Quand utiliseriez-vous (normalement) ce type d'URL?
Lorsque vous souhaitez acheminer toutes les demandes via un "contrôleur frontal" (par exemple, index.php
) et que vous n'avez pas accès au moteur de réécriture des serveurs. Le contenu peut être stocké dans une base de données et votre "contrôleur frontal" sait comment construire la réponse pour une URL de requête donnée.
Par exemple, dans index.php
, vous pourriez avoir quelque chose comme:
<?php
$content = [
'STATUS' => 200,
'TITLE' => null,
'BODY' => null,
];
$url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : null;
if ($url == '/author/') {
// Lookup content from database or other file etc....
$content['TITLE'] = 'Author';
$content['BODY'] = '<p>My name is bob.</p>';
}
elseif ($url == '/contact/') {
// Lookup content from database or other file etc...
$content['TITLE'] = 'Contact Me';
$content['BODY'] = '<p>Please complete the form below...</p>';
}
else {
$content['STATUS'] = 404;
$content['TITLE'] = '404 Not Found';
$content['BODY'] = 'Sorry, could not find the page you requested.';
}
http_response_code($content['STATUS']);
?>
<html>
<head>
<title><?={$content['TITLE']}?></title>
</head>
<body>
<?={$content['BODY']}?>
</body>
</html>