Tak, wczytanie z bazy to jak najbardziej słuszny pomysł.
Jeśli chodzi o linki to bez problemu można zrobić ich przepisywanie. Czyli np. post.php?id=5 zamienić na /post/5. Co więcej, w bazie można też trzymać opisową część linka - np. "to-jest-tytul-posta", a następnie we wspomnianym wcześniej przepisywaniu użyć tego zamiast liczby. Pojawia się wtedy kwestia unikalności linka, albo musi być unikalny albo zawierać jeszcze dodatkowo np. id, aby było wiadomo o którego posta na pewno chodzi. Tym sposobem możesz uzyskać normalny adres w rodzaju /post/to-jest-tytul-posta.
Jeszcze innym podejściem, które jest teraz spotykane w większości aplikacji, jest robienie routingu po stronie kodu, a na serwerze skierowanie każdego wywołania na aplikację (każdego z wyjątkiem faktycznie istniejących plików). Dzięki temu cała decyzja o tym co zrobić zapada po stronie aplikacji, tam jest zdefiniowane dla jakiego adresu co ma zrobić. Serwer tylko zawsze kieruje do aplikacji, jakiegoś jednego pliku wejściowego. Takie rozwiązanie jest też używane we frameworkach, np. w Symfony czy Laravelu.