Development - Routing

ApPHP Framework always analyzes a URL received from the browser by splitting it into two parts:
  1. Main part: it is the URL including its domain name; in the above example it is http://www.domain.com/
  2. Internal part: it is the remaining part following the installation URL; in the above examples it is page/, page/view/id/2, index.php?url=controller/action, etc.

By default, ApPHP Framework recognizes URLs with the following formats:

Variant 1 (The url GET variable can be retrived in a standard way, urlFormat "get"):
http://hostname/index.php?url=controller/action&param1=aaa&param2=bbb&param3=ccc
Variant 2 (urlFormat "get"):
http://hostname/page/controller/action?param1=aaa&param2=bbb&param3=ccc
Variant 3 (urlFormat "path"):
http://hostname/page/controller/action/param1/aaa/param2/bbb/param3/ccc
Variant 4 (You may specify a custom format "shortPath" for URL by creating special definitions in configuration file):
// URL manager
'urlManager' => array(
    'urlFormat' => 'shortPath',  /* get | path | shortPath */
    'rules' => array(
        /* direct comparison */ 
        'controller/action/value1/value2' => 'controller/action/param1/value1/param2/value2',

        /* advanced template comparison: two or more parameters */ 
        'pages/view/(.*?)/(.*?)/(.*)' => 'pages/view/id/{$0}/param2/{$1}/param3/{$2}',
        'pages/view/(.*?)/(.*)' => 'pages/view/id/{$0}/param2/{$1}',

        /* simple template comparison */ 
        'page/vew/id/(.*[0-9])+' => 'index/page/id/{$0}',
        'page/vew/id/(.*[0-9])+/(.*?)' => 'index/page/id/{$0}',
        'page/vew/(.*[0-9])+' => 'index/page/id/{$0}',
        'page/vew/(.*[0-9])+/(.*?)' => 'index/page/id/{$0}',
        'page/(.*[0-9])+' => 'index/page/id/{$0}',
        'page/(.*[0-9])+/(.*?)' => 'index/page/id/{$0}',		
    ),
),    
Remember, that rules are checked sequentially until the match rule is found, so you have to order them in a certain way to avoid overlapping. For example:
// This rule must be defined before
'pages/view/(.*?)/(.*?)/(.*)' => 'pages/view/id/{$0}/param2/{$1}/param3/{$2}',
// This rule must be defined after
'pages/view/(.*?)/(.*)' => 'pages/view/id/{$0}/param2/{$1}',
Also, for custom format you have to define all appropriate parameters in your Controller.