Salut,
A la base l'erreur 404 est automatique. Si le fichier n'existe pas, le serveur web retourne une 404.
Mais dans ce cas, étant donné que tu utilises ce que l'on pourrait appeler un contrôleur principal (index) vers lequel tu rediriges toutes les adresses [a-z-]*, c'est dans ce contrôleur que tu dois gérer l'erreur 404.
Tu pourrais par exemple maintenir un tableau des valeurs de $_GET['page'] connues.
Et si la valeur de page est inconnue, tu envoies un header 404 (copier depuis la doc php header) suivi d'un exit :
if (!in_array($_GET['page'], array('page1', 'page2'))) {
header("HTTP/1.0 404 Not Found");
exit ;
}
PS : en admettant que tu ais une page 404.html tu pourrais remplacer le header par celui ci :
header('Location: http://ton.nom.de.domaine/404.html', true, 404);
Ou alors tu pourrais charger ou afficher le contenu de la page 404 afin que ce soit bien l'adresse en 404 qui s'affiche comme 404 :
if (!in_array($_GET['page'], array('page1', 'page2'))) {
header("HTTP/1.0 404 Not Found");
echo file_get_contents('404.html');
exit ;
}
// OU
if (!in_array($_GET['page'], array('page1', 'page2'))) {
header("HTTP/1.0 404 Not Found");
echo 'Page not found!';
exit ;
}