Ça lu,
En soit c'est simple et en faisant simple :
- ton url devrait avoir cette tête :
- tu insères tes pages en base :
CREATE TABLE pages(
id INT AUTOINCREMENT NOT NULL UNSIGNED PRIMARY KEY,
titre VARCHAR(255) NOT NULL,
content TEXT not null,
#etc.
);
Tes liens devraient avoir cette tête n'est ce pas ?
<?php foreach($pages as $page) : ?>
<!-- etc. -->
<a href="mon-site.fr/?<?php echo http_build_query(array("id" => $page->id, "page" => $page->titre)) ?>" >$page->titre </a>
<!-- etc. -->
<?php endforeach; ?>
Le fichier php qui traitera tes liens devrait plutôt être dans ce goût là :
if(isset($_GET['id']) && preg_match('#\d+#',trim($_GET['id']))){
$sql = "SELECT titre,content, ... FROM pages WHERE id=".trim($_GET['id']); //bien protégé la requete et voir les privilèges de la table (;)). La j'ai ça à l'arrache mais c'est pour te donner l'idée.
$row = $pdo->query($sql)->fetch(PDO::FETCH_OBJ);
if(!empty($row->titre)){
//soit tu balances le content si tu pars dans ce sens de mettre le contenu principal de tes pages en base (ob_start/ob_get_clean)
//soit tu fais ton require_once un peu plus loin 'après le dernier else
}else{
header('location:404.php'); //require aussi...
}
}else{
header('location:404.php'); //require aussi...
}
Je te conseille vraiment de soigner les différents aspects de ce fichier. Tu peux le faire évoluer dans ce sens par exemple : tu peux y inclure un système de template (je ne parle pas de moteur de template, le php est le moteur de template par excellence !) avec tes vues. Je te conseille aussi d'extrapoler et de factoriser le plus possible pour te simplifier la vie. Il y a pas plus feignant qu'un dev. Je veux entendre par là que les tâches récurrentes sont/seront simplifiées/extrapolées/factorisées. Dernier point, avoir toujours en tête ces deux concepts :
KISS et
DRY. A terme ce fichier pourrait ressembler à ce genre de choses (le principe n'est pas tout à fait le même que celui que je t'ai indiqué, mais l'idée générale reste à peu près la même (les données de l'url)) :
<?php
try{
define('PUBLIC',dirname(__FILE__));
define('ROOT',dirname(WEBROOT));
define('DS',DIRECTORY_SEPARATOR);
define('CORE',ROOT.DS.'Core');
define('BASE_URL',dirname(dirname($_SERVER['SCRIPT_NAME'])));
define('CONFIG','Config');
define('MODEL','Model');
define('VIEW','View');
define('CONTROLLER','Controller');
define('TEMPLATE','Template');
function __autoload($class){
$path = ($class == 'Config')? ROOT.DS.CONFIG.DS : CORE.DS; //chemin vers la config ?
require_once $path.$class.".php";
}
Dispatcher::init();
}catch(Exception $e){
echo $e->getMessage();
}
Une fois que tu as compris où je voulais en venir

, je t'invite à lire ce très bon tuto :
https://craym.eu/tutoriels/referencemen ... iting.html.
Il faut avouer que ton if/elseif que l'on peut optimiser en switch fait de toute manière mal à la tête.... paye ta maintenance.... Je t'ai indiqué une manière simple de gérer cette aspect. Tu peux la faire évoluer dans plusieurs sens. Les pages peuvent être dans des catégories/sous-catégorie avec une table adéquate construite en arbres ou pas. Ton url pourra être : mon-site.fr?categorie=boutique&id=1234567&page=une%20page et quand elle sera réécrite, ça pourrait donner : mon-site.fr/boutique/1234567-une-page.html.
Je te laisse imaginer comment réécrire dynamiquement les urls.
code fait de tête, c'est juste pour donner une bonne piste.