Да, это возможно.
По сути, в вашем DNS вы должны разрешить размещение * .site.com на одной машине.Таким образом, независимо от того, какой поддомен вы вводите, машина будет одинаковой.
пример записи dns:
* A 10.0.0.1
Затем в объявлении виртуального хоста вы должны указать
<VirtualHost *>
DocumentRoot /var/www/path_to_site
ServerName site.com
ServerAlias www.site.com *.site.com
</VirtualHost>
таким образом, независимо от того, что вы набираете, то есть что-то. Ie.site.com или city.site.com будут перенаправлены в одно приложение.
Тогда вам просто нужно проанализировать хост из php (желательно в AppController) и преобразовать поддомен в фильтр.
Это немного абстрактно, но вот как я бы это сделал.
Редактировать (ответ на комментарий): Вопрос в том, как построить систему.В основном, если у вас есть:
cite1.site.com
в вашем AppController, вы можете иметь что-то вроде:
class AppController extends Controller {
function beforeFilter(){
$host = explode('.', $_SERVER["HTTP_HOST"]);
$subdomain = $host[0];
Configure::write('city', $subdomain);
$this->City->getId($subdomain); //function in City model fetching City ID by city name
...
}
}
Итак, в основном, после этого все зависит от архитектуры вашего приложения и от того, как вы с этим справитесьгород.