Подключаете определение города по ip. Узнаете город, делаете редирект на поддомен.
Прописываете в апаче или нжинкск чтобы все поддомены были алиасами основного.
Дополню.
На одном проекте у меня есть договоры, которые может смотреть только его пользователь.
Договоры храню за пределами папки сайта, к этой папке имеет доступ только юзер, под которым запускатся апач и нджинкс. Есть файл на пхп, в который передается id договора, в скрипте идет проверка действительно ли он принадлежит текущему авторизованному пользователю и если да, то на пхп отдается файл.