Using CakePHP, I would like to redirect from this URL:
http://www.example.com/songs/12345/Michael-Jackson-Billie-Jean
to this URL:
http://www.example.com/songs/12345
In the new URL, the controller is songs
, the id is 12345
, the implied action is view
, and the slug (Michael-Jackson-Billie-Jean
) is removed.
Is it possible to program this redirect using the routes config file, or will I need to program a slightly more advanced redirect in either a controller or route class?
I have tried the following two possibilities to no avail. In this first attempt, I end up getting a URL with view
in the URL and parameters appended to the end of the URL:
Router::redirect(
'/songs/:id/**',
array('controller' => 'songs', 'action' => 'view'),
array('persist' => array('id'))
);
// Redirects to http://www.example.com/songs/view/Michael-Jackson-Billie-Jean%2Fid%3A1286072880/id:view
In my second attempt, the redirect almost works, but the string :id
is literally echoed in the URL:
Router::redirect(
'/songs/:id/**',
'/songs/:id'
);
// Redirects to http://www.example.com/songs/:id
I suppose I could write this redirect in the root .htaccess file, but I would prefer to keep all the routing in one place; namely, the CakePHP routes file.
Does anyone know how I can redirect to http://www.example.com/songs/:id
where :id
is the song ID and not literally the string :id
? Thank you so much.