Ответ
Menandr 20.07.2015 21:56
Я храню все урлы в виде таблицы в базе. Это решает проблему построения сайтмапов а так же ловли 404 ошибок (и много других проблем тоже решает).
Каждая страница индивидуально связана с модулем. Модуль - группа страниц по определённому признаку (блог, новости, карточка товара в интернет-магазине и т.п.). Модули аналогично хранятся в отдельной таблице БД. Каждый модуль имеет настраиваемые параметры - список подключенных css и js файлов, имена классов, отвечающих за хранение html-кода header'а, body и footer'а, имена классов, отвечающих за построение контента на этой странице + некоторые глобальные (в рамках модуля) параметры.
Также каждая страница имеет индивидуальный набор параметров - индексировать ли поисковиком, отображать ли в результатах поиска по сайту, встраивать ли в сайтмап, показывать ли вообще и если да, то каким группам пользователей, и т.д. и т.п., параметров много (+ можно переопределить любые параметры модуля).
Каждая страница строится из блоков, которые формируются аналогичным образом.
На самом деле, структура ещё более сложная и еще более гибкая за счёт иерархических настроек.