Делается очень просто это.
Сервер (nginx например) конфигурируется на routing всех запросов, включая сабдомены в одну точку. Дальше уже на стороне вашего фреймворка вы делаете внутренний routing на основе парсинга URL и доменов, с сохранением текущего сабдомена где-нибудь в repository.