I've been reviewing the documentation for October CMS routing (https://octobercms.com/docs/plugin/registration#routing-initialization), but I think that I am missing something. I have a page called 'deals' that renders some basic information along with a plugin (called 'deals') component. The page normally appears at the url:
http://www.example.com/deals
However, I want to create a route so that if someone visits the url:
http://www.example.com/deals2
it will automatically route them back to
http://www.example.com/deals
I know that I should create a routes.php file in my plugin directory. However, when I try using
Route::get('/deals2', function()
{
return View::make('deals');
});
It complains that it can't find the 'deals' view. What am I doing wrong?
Additionally, how can I route it so that my homepage
http://www.example.com
would route to
http://www.example.com/deals
In OctoberCMS, and Laravel which it's based on, to redirect one route to another you can do this:
// Redirect /deals2, /deals3, ... to /deals
Route::get('{dealSlug}', function($dealSlug) {
return redirect('deals');
})->where('dealSlug', '^deals[0-9]+');
// Redirect homepage to /deals
Route::get('/', function() {
return redirect('deals');
}
The first route uses a route parameter with a regex constraint and will redirect any request that starts with /deals
and ends with a number to your /deals
route. That means it will route /deals1
, /deals2
, /deals3
, etc to /deals
.
The second route will redirect your homepage to /deals
.
Of course, redirecting will cost an extra request. If you don't want to do that, then you could do the redirect in Apache or Nginx.
As per your comment, if you wanted to redirect /deals[any-number]/[anything]
to /deals/[that-same-anything]
then you would add an optional route parameter to the first route. That would look like this:
// The new first route
Route::get('{dealSlug}/{extra?}', function($dealSlug, $extra = '') {
return redirect('deals/' . $extra);
})->where('dealSlug', '^deals[0-9]+');
Of course, if that /deals/[anything]
route doesn't exist, then you'll get a 404.
Try
Route::get('/deals2', function(){return Redirect::to('/deals')});
which will redirect the browser at the cost of an extra request.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With