???
Про «соответствие» вам Astin уже писал, когда показывал, как можно при помощи ассоциативного массива связать первый компонент пути с файлом. Можно для этого использовать и полноценную базу, объединяя первичный роутинг с извлечением доп. полезных данных из БД:
id module
------ ------
biznes relpath/to/mod
eli4ka profile
Или гляньте первую таблицу
тут.
Тему можно развивать, используя для адресов [/]cat/obj таблицы второго уровня. Гляньте статью
там же. Уже на основе этого можно начинать строить REST-интерфейс:
GET /cat – получить список объектов категории (без пагинации);
POST /cat – создать/удалить объект(ы) категории;
GET /cat/obj – отредактировать объект (вывести форму редактирования);
POST /cat/obj – сохранить объект;
и т.п. Если «не хватает» методов и таких простых адресов, чтобы различать все необходимые экшины, начинаете вводить доп. параметры, например путем добавления строки параметров, только не с параметрами вроде action=show, а по-прежнему с «сущностными» вроде page=1 (ваши act=albums и проч. в общем-то «сущностные», только название act тут не к месту).
Таблицы второго уровня не обязательно должны существовать для всех веток. Где-то могут быть только простые адреса вроде /eli4ka, где-то при использовании сложного адреса данные могут браться не из базы, а, например, из ФС и т.п. Начиная со второго компонента пути (включая или нет строку параметров) может работать вторичный обобщенный или индивидуальный для каждого модуля роутинг.
Что касается универсальных экшинов для всех таблиц, то ничего не мешает к примеру при администрировании описанной выше двухуровневой структуры БД иметь общий для всех таблиц экшин редактирования, сохранения и т.д. (Трюк, позволяющий работать с «коллекциями» (записями корневой таблицы) точно так же, как и с другими объектами, описан в конце статьи по второй ссылке.)