Страница 1 из 1

url redirect

Добавлено: 2016.07.18, 14:18
Tivos
Здравствуйте, подскажите как реализовать следующую задачу.
В БД есть таблица со связанными полями "old_url" и "new_url"
Задача:
при переходе по адресу, к примеру, my-site.loc/base/filter/category/3063/
найти эту запись в поле "old_url" и сделать редирект на соответствующий адрес с поля "new_url"

Re: url redirect

Добавлено: 2016.07.18, 14:25
ElisDN
1. Ищете запись по old_url
2. Если нашлось, то делаете редирект на new_url.

Re: url redirect

Добавлено: 2016.07.18, 14:38
Tivos
=))
я так понимаю нужно создать класс с правилами для urlManager.
А что дальше делать не знаю, где делать делать редирект и как

Re: url redirect

Добавлено: 2016.07.18, 14:47
ElisDN
Либо правилом для UrlManager, либо просто отдельный экшен в контроллере сделать и в нём редиректить.

Re: url redirect

Добавлено: 2016.07.18, 19:04
Loveorigami
Я вешал на errorHandler. Т.е когда ничего не находится, там и делаем запрос.
Идею взял отсюда.
https://github.com/amirax/yii2-seo-tool ... direct.php

Код: Выделить всё

class Redirect extends ErrorHandler {
    public function handleException($exception)
    {
        $redirectModel = SeoRedirects::find()
            ->where(['old_url' => Yii::$app->request->url])
            ->asArray()
            ->one();
        if(!empty($redirectModel)) {
            $redirectStatus = ($redirectModel['status'] == 302) ? 302 : 301;
            header("Location: " . $redirectModel['new_url'], true, $redirectStatus);
            exit;
        }
        parent::handleException($exception);
    }
}
 

Re: url redirect

Добавлено: 2016.07.18, 19:12
zelenin
а я делал генератор конфига для нджинкса, чтобы приложение не дергать. у нас 150+ тыс. редиректов.

Re: url redirect

Добавлено: 2016.07.19, 17:47
Tivos
спасибо