Как на развернуть весь сайт в index.php?
Сейчас в этом коде все поставлено с ног на голову.
Я так понимаю, что всё затевается ради того, что "Шапка и футер сайта у меня везде одинаковые"
И сначала идет шапка, потом этот матч, а потом футер. 
То есть у нас код начинается с вывода HTML, в то время как это должно быть самое последнее, что происходит в скрипте.
А всё должно быть строго наоборот - сначала должна выполняться обработка данных РНР кодом, и только потом начинаться вывод HTML.

Взять к примеру запрос /cart, который в обязательном порядке должен обрабатывать запросы POST
после такого запроса обязательно должен выполняться редирект. А редирект мы сделать не можем, потому что у нас пол-сайта уже клиенту ушло.
Не говоря уже о других НТТР загололовках, или о том, что хидер у тебя не статичный, и значительно меняется от страницы к странице.

Для начала надо сделать вот так, phpfaq.ru/tech/tpl#example

Потом, когда всё заработает, можно будет переделать на единый индекс, хотя это не будет иметь большого смысла на данном этапе. потом, когда сайт будет представлять из себя не отдельные страницы, а фабрику по отдаче контента - тогда можно будет переделать на единый индекс.
В папке сайта нужно создать файл .htaccess
вот с таким содержимым
Options -Indexes
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
</IfModule>

а потом уже в нужном месте, в нужное время делать
match ($_SERVER['REDIRECT_URL']) {
    	"/index.php" => include "main.html",
    	"/cart" => include "cart.html",
    	"/admin" => include "admin.html",
    	default => include "main.html",
};
ну или через if, если у вам не php8