This should be solved by a pretty default segment route like the one provided in the documentation.
'type' => 'Zend\Mvc\Router\Http\Segment', 'options' => array( 'route' => '/:controller[/:action]', 'constraints' => array( 'controller' => '[a-zA-Z][a-zA-Z0-9_-]+', 'action' => '[a-zA-Z][a-zA-Z0-9_-]+', ), 'defaults' => array( 'controller' => 'default-controller-alias', 'action' => 'index', ), )
Now if you set up your controller names like the following:
'controllers' => array( 'invokables' => array( 'sites' => 'Namespace\Controller\SitesController', 'other' => 'Namespace\Controller\OtherController'
Then you should be able to achieve exactly what you want. And to create params to your route, you simply use the ViewHelper correctly ;)
$this->url('routename', array( 'controller' => 'site', 'action' => 'getData' ), array ( 'query' => array( 'param1' => 'foo', 'param2' => 'bar', 'paramN' => 'baz', ) ) )