Trying to understand appropriate routing in MVC I am learning MVC, and trying to understand routing.

I understand that if I want to show an individual blog post for site.com/54, my route would be something like

//index.php
$controller = new Controller();
if ( preg_match("#/(0-9.)#", $uri, $matches) ) {
    $controller-&gt;showAction($matches[1]);
}


which would lead to my controller

//controllers.php
class Controller
{
    private function showAction($id) {
        $post = getPostById($id);
        $view = new View('views/show.php');
    }
}


And, on the other hand, a sensible thing to do for different static pages is perhaps

//index.php
...
} elseif ($uri == '/about') {
    $controller-&gt;aboutAction();
} elseif ($uri == '/contact') {
    $controller-&gt;contactAction();
} elseif ($uri == '/') {
    $controller-&gt;indexAction();
} else {
    $controller-&gt;missingAction();
}


My question is, what about the in-between? For example, apple.com/ipad/overview/ and apple.com/ipad/features/. They are different pages, so it seems like the latter is sensible (i.e. unique controller method for each page). But then, when you're on /overview, you still need to know you're a sub-page of /ipad (so you can highlight the iPad button in the navigation). If you did the first method (regex parsing), you'd know that (i.e. you could use $matches[1] when constructing your navigation). If you use the second method, it seems like in your view you'd have to do something like $current_product = 'ipad' so your nav would know about it. But this could get cumbersome.

What's the appropriate method?
Have you thought about calling the overview only when the URI ends in "overview" and preceded by a product slug?

$controller = new Controller();
if ( preg_match("#^/([a-zA-Z0-9_-]+)/overview/?$#", $uri, $matches) ) {
    $controller-&gt;showOverview($matches[1]);
}


This way, you define your routes with the following assumption:

/:product
/:product/specs
/:product/comments
/about


You should check out the Slim Framework: http://www.slimframework.com/

I've used it just for routing when performance was a crucial requirement.