Октябрь CMS - Как правильно маршрутизировать

Я просматривал документацию для октябрьской маршрутизации CMS (https://octobercms.com/docs/plugin/registration#routing-initialization), но я думаю, что чего-то не хватает. У меня есть страница под названием "сделки", которая предоставляет некоторую базовую информацию вместе с компонентом плагина (называемым "предложениями" ). Обычно страница появляется в URL-адресе:

http://www.example.com/deals

Однако я хочу создать маршрут, чтобы, если кто-то посещает URL-адрес:

http://www.example.com/deals2

он автоматически перенаправит их обратно на

http://www.example.com/deals

Я знаю, что я должен создать файл route.php в моем каталоге плагинов. Однако, когда я пытаюсь использовать

Route::get('/deals2', function()
{
        return View::make('deals');
});

Он жалуется, что не может найти вид "сделок". Что я делаю неправильно?

Кроме того, как я могу направить его так, чтобы моя домашняя страница

http://www.example.com

будет маршрутизироваться на

http://www.example.com/deals

Ответ 1

В OctoberCMS и Laravel, на которых он основан, для перенаправления одного маршрута в другой вы можете сделать это:

// 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');
}

Первый маршрут использует параметр маршрута с ограничение regex и перенаправляет любой запрос, начинающийся с /deals, и заканчивается номером ваш маршрут /deals. Это означает, что он отправит /deals1, /deals2, /deals3 и т.д. На /deals.

Второй маршрут перенаправит вашу домашнюю страницу на /deals.

Конечно, перенаправление будет стоить дополнительный запрос. Если вы не хотите этого делать, вы можете сделать перенаправление в Apache или Nginx.

В соответствии с вашим комментарием, если вы хотите перенаправить /deals[any-number]/[anything] в /deals/[that-same-anything], вы добавите параметр // The new first route Route::get('{dealSlug}/{extra?}', function($dealSlug, $extra = '') { return redirect('deals/' . $extra); })->where('dealSlug', '^deals[0-9]+');

Конечно, если этот маршрут /deals/[anything] не существует, тогда вы получите 404.

Ответ 2

Try Route::get('/deals2', function(){return Redirect::to('/deals')});, который перенаправляет браузер за счет дополнительного запроса.