Так тоже не получится.
в forward() вызывается CWebApplication::runController($route) без обработки. А при изначальном вызове парсится урл из запроса, параметры заносятся в _REQUEST и все такое:
$route=$this->getUrlManager()->parseUrl($this->getRequest());
$this->runController($route);
Так что надо сделать примерно вот так:
$request = Yii:app()->getRequest();
$request->pathInfo = $this->createUrl('/page/test', array('id'=>12));
$route=$this->getUrlManager()->parseUrl($request);
$this->runController($route);
Но я совсем не уверен, что вам удастся таким образом установить pathInfo в реквесте, так что еще проще
вручную записывать параметры в $_REQUEST[«id»]=$_GET["$id"]=12;
Но выглядит это все добро совсем не кошерно. Мне кажется удобней будет переписать UrlManager на свой лад. Просто если у вас запросы все обрабатываются в одном контроллере, который неведомым образом знает куда какой форвардить, то лучше это добро переписать внутрь UrlManager-a. Да и через него урлы формируются для новых страниц (вы же их не жестко прописываете?). Однажды там описать правила или хранить их в базе или где там надо и все.
Из описания проблемы не очень понятно… Если у вас есть несколько контроллеров Page, Product,… и есть урлы вида
page1.html,
product-
cool.html соответственно, то и проблемы-то нет. Просто надо переписать правила роутинга для этих контроллеров. Вот для Page, например
'page<id:\d+>'=>'page/index', //$id перейдет в indexAction($id)
Для Product тож придумать можно
'product-<name:\w+>'=>'product/index', //$name перейдет в indexAction($name)