Skip to content

Usage: RedirectRoute

Phally edited this page Oct 8, 2010 · 5 revisions

The RedirectRoute redirects your route instead of routing it to a controller-action pair. This is super useful when dealing with legacy urls.

RedirectRoute extends the QueryStringParseRoute, so the documentation for that class also applies for this one!

There are some examples at the bottom.

Options

Permanent

You can have permanent and temporary redirects. RedirectRoute will always do a permanent redirect unless told different like:

<?php
    array('permanent' => false)
?>

Examples

Simple permanent redirect

Url: /old/url/23/page:3

To: /news/show/23/page:3

<?php
    App::import('Lib', 'RouteEnhancements.RouteClasses');
    Router::connect(
        '/old/url/*',
        array(
            'controller' => 'news',
            'action' => 'show'
        ), 
        array(
            'routeClass' => 'RedirectRoute',
        )
    );
?>

Simple permanent GET redirect

Url: /page.php?doaction=show&id=5

To: /pages/show/5

<?php
    App::import('Lib', 'RouteEnhancements.RouteClasses');
    Router::connect(
        '/page.php',
        array(
            'controller' => 'pages',
            'action' => ':doaction'
        ), 
        array(
            'routeClass' => 'RedirectRoute',
            'pass' => array('id')
        )
    );
?>

Simple temporary GET redirect

Url: /page.php?doaction=show&id=5

To: /pages/show/5

<?php
    App::import('Lib', 'RouteEnhancements.RouteClasses');
    Router::connect(
        '/page.php',
        array(
            'controller' => 'pages',
            'action' => ':doaction'
        ), 
        array(
            'routeClass' => 'RedirectRoute',
            'pass' => array('id'),
            'permanent' => false
        )
    );
?>

Advanced temporary GET redirect

Url: /page.php?doaction=users.show&id=5

To: /users/show/5

<?php
    App::import('Lib', 'RouteEnhancements.RouteClasses');
    Router::connect(
        '/page.php',
        array(
            'controller' => ':doaction{/([a-z]+)\.[a-z]+/}',
            'action' => ':doaction{/[a-z]+\.([a-z]+)/}'
        ), 
        array(
            'routeClass' => 'RedirectRoute',
            'pass' => array('id'),
            'permanent' => false
        )
    );
?>

Permanent GET redirect with GET parameter conditions

Url: /page.php?doaction=edit&id=5

To: /pages/edit/5

<?php
    App::import('Lib', 'RouteEnhancements.RouteClasses');
    Router::connect(
        '/page.php',
        array(
            'controller' => 'pages',
            'action' => ':doaction'
        ), 
        array(
            'routeClass' => 'RedirectRoute',
            'doaction' => 'show|edit',
            'id' => '[0-9]+',
            'pass' => array('id')
        )
    );
?>

GET parameters as named parameters

Url: /page.php?doaction=index&id=5&page=3

To: /pages/index/5/page:3

<?php
    App::import('Lib', 'RouteEnhancements.RouteClasses');
    Router::connect(
        '/page.php',
        array(
            'controller' => 'pages',
            'action' => 'index'
        ),
        array(
            'routeClass' => 'RedirectRoute',
            'pass' => array('id'),
            'ignore' => array('doaction')
        )
    );
?>

GET parameters as aliased named parameters

Url: /page.php?doaction=index&id=5&page=3

To: /pages/index/5/pagenumber:3

<?php
    App::import('Lib', 'RouteEnhancements.RouteClasses');
    Router::connect(
        '/page.php',
        array(
            'controller' => 'pages',
            'action' => 'index'
        ), 
        array(
            'routeClass' => 'RedirectRoute',
            'pass' => array('id'),
            'aliases' => array('page' => 'pagenumber'),
            'ignore' => array('doaction')
        )
    );
?>