Использование Kohana Routes для перенаправления

Я использую Kohana Framework 3.2.

Обычно в моем загрузочном файле я могу настроить Route::set следующим образом:

Route::set('faq', 'faq')->defaults(array('controller' => 'home', 'action' => 'faq'));

Это делает так, что example.com/faq указывает на мой домашний контроллер, часто задаваемые вопросы.

Я хотел бы знать, могу ли я настроить перенаправление таким же образом?

Итак, я могу сказать, что example.com/faq должен перенаправлять на example.com/thegreatfaqs?

Или нужно использовать route::set, как указано выше, для контроллера, который затем перенаправляет запрос на /thegreatfaqs?


person Karem    schedule 13.05.2014    source источник


Ответы (3)


В Kohana нет ничего встроенного для обработки перенаправления внутри маршрутов.

Обычно я делаю маршрут к контроллеру перенаправления, у которого есть все мои правила перенаправления, и я обрабатываю перенаправление там.

person Scott Jungwirth    schedule 14.05.2014
comment
Как бы вы это сделали? Маршрут к контроллеру перенаправления = это означает, что вы создаете маршрут, который захватывает все (например, маршрут по умолчанию), а затем из контроллера вы проверяете свои правила, если пример /faq должен быть перенаправлен на google.com/blabla ? Что, если это не так, и нам нужны и другие маршруты? Вы ставите маршрут перенаправления в конце всех остальных маршрутов? - person Karem; 16.05.2014
comment
да, это последний маршрут. В случае, если совпадения перенаправления не найдены, вы можете создать исключение 404 или, если у вас есть какой-либо контроллер/действие ошибки, вы можете просто вызвать его напрямую. - person Scott Jungwirth; 18.05.2014

Вы можете сделать это с помощью Route filter, но я думаю, что это < strong>Плохая идея, так как вы прерываете нормальный поток приложения Kohana.

Route::set('redirecturl', 'redirecturl')
->filter(function($route, $params, $request) {
    header('Location: http://www.example.com/');
    exit;
});

Я бы предложил правило перенаправления (Apache .htaccess) или перенаправление с выделенного действия контроллера, как упоминал Скотт, является гораздо более чистым решением.

person Carl Groner    schedule 14.05.2014

Вы можете установить свой маршрут следующим образом....>

Route::set('faq', 'thegreatfaqs(/<action>(/<id>))')
->defaults(array(
    'controller'    => 'home',
    'action'    => 'faq',
));
person TechBuddy    schedule 14.05.2014
comment
Это указывает на контроллер/действие, которое я не ищу. Я хотел бы настроить перенаправление, чтобы example.com/faq мог указывать на что угодно, это может быть внешний сайт, например google.com/faq. - person Karem; 14.05.2014
comment
хорошо .. более чистым решением было бы реализовать, как ответил Скотт здесь. - person TechBuddy; 15.05.2014