I am trying to *forward* every category page to a product view page using an event observer. But it seems to be not working.

Scenario : I am playing around with Magento router now. As part of this, I am trying to forward every category page in my Magento instance to the product page. The product page which is going to load for a category is the page of first product in that category.

**What I have Tried** : I observed to the event `controller_action_predispatch_catalog_category_view` and added below code to my observer method.

```
public function forwardSingleProCategory(Varien_Event_Observer $observer)
{
    //get event data
    $action = $observer->getControllerAction();
    $request = $action->getRequest();

    //get category id
    $categoryId = (int)$request->getParam('id', false);

    //grab category collection
    $layer = Mage::getModel('catalog/layer')->setCurrentCategory($categoryId);
    $collection = $layer->getProductCollection();

    //check whether category count is 1. If YES, then do magic
    if ($collection->getSize() > 0) {

        //prepare parameters that needs for the action `catalog/product/view`
        $product = $collection->getFirstItem();
        $actionName = 'view';
        $controllerName = 'product';
        $moduleName = 'catalog';
        $params = array(
            'category' => $categoryId,
            'id'       => $product->getId()
        );

        //tells no to category page router processing further
        $request->setDispatched(false);

        //throw exception with a clear message we need a product page.
        $e = new Mage_Core_Controller_Varien_Exception();
        $e->prepareForward($actionName, $controllerName, $moduleName, $params);
        throw $e;

    }

    return $this;
}

```

See the comments that I have put in the code. If something is not clear in my code please let me know. I can explain

But I am getting *404 Page* for every category page request. Ooops !!!

**How much I debug** : The 404 page is triggering from `Mage_Catalog_ProductController` itself (which means observer is working fine). The problem lies here in this section :

```
 public function viewAction()
{
    // Get initial data from request
    $categoryId = (int) $this->getRequest()->getParam('category', false);
    $productId  = (int) $this->getRequest()->getParam('id');
    $specifyOptions = $this->getRequest()->getParam('options');
    ...
    try {
        $viewHelper->prepareAndRender($productId, $this, $params);
    } catch (Exception $e) {
        if ($e->getCode() == $viewHelper->ERR_NO_PRODUCT_LOADED) {
            if (isset($_GET['store'])  && !$this->getResponse()->isRedirect()) {
                $this->_redirect('');
            } elseif (!$this->getResponse()->isRedirect()) {
                $this->_forward('noRoute');
            }
        } else {
            Mage::logException($e);
            $this->_forward('noRoute');
        }
    }

```

The problem is `$productId` and `$categoryId` are same (seems that both holds category id value) and hence the line `$viewHelper->prepareAndRender($productId, $this, $params);` is failing and thus I am getting 404 page.

But in my observer, you can see that I am setting both `category` and `id` parameters via this section

```
$e = new Mage_Core_Controller_Varien_Exception();
$e->prepareForward($actionName, $controllerName, $moduleName, $params);

```

I double checked and confirmed that `$params` (holds the right product id for `id` and right category id for `category`) are correct in my observer.

So my question is how it is get rewriting by category Id in the router process in this scenario ?

How can I make it work ?