Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Редиректор

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 Редиректор

Avatar for Evgeny E. Neverov

Evgeny E. Neverov

November 02, 2017
Tweet

More Decks by Evgeny E. Neverov

Other Decks in Technology

Transcript

  1. Почему не mod_rewrite? • Никто из нас его не знает

    • Любая ошибка → пизда сайту
 (а без ФТП — совсем пизда) • Сложно дебажить • Не передашь управление клиенту или сеошнику
  2. Почему не nginx rewrite? • Никто (вообще) его не знает

    • Любая ошибка → пизда сайту
 (а без рутовых доступов даже не настроить) • Сложно дебажить • Не отдашь управление клиенту или сеошнику
  3. Общий принцип работы модуля 1. Запускается каждый хит на OnBeforeProlog

    и проверяет, что модуль в боевом режиме. 2. Загружает настройки и текущие правила 3. Проверяет условия каждого правила 4. Выполняет редирект, если требуется
  4. Правило • Отдельная запись, в которой заданы условия и действия

    • Есть статус редиректа • У правила есть сроки активности, сортировка, привязка к сайтам • Флаг остановки проверки
  5. Условия правила Что проверяем Протокол Домен Путь до страницы Параметр

    URL Полный адрес страницы Местоположение посетителя Callback (true / false) равно не равно начинается с не начинается с содержит не содержит соответствует регулярке не соответствует регулярке
  6. Действия правила Выполняются над текущим адресом, если все условия правила

    сработали: • Изменить протокол • Изменить домен • Изменить путь до страницы • Изменить параметр запроса • Перенаправить на URL • Показать 404 ошибку • Выполнить callback и перейти на возвращённый URL • Ничего не делать
  7. Ничего не делать Правило: если параметр size=xs, сменить его на

    «m» Сделать исключение для раздела /catalog/noski/ • Условие: Путь начинается с /catalog/noski/ • Действие: Ничего не делать • Остановить обработку правил
  8. Если изменили домен, проверку лучше остановить if ($path == "/abc")

    $url = "http://yandex.ru"; if ($protocol == "http") $path = "/small/"; http://site.ru/abc → ? http://yandex.ru/small/
  9. Магия • Модуль хранит «текущий адрес» в переменной • Каждое

    сработавшее правило меняет именно эту внутреннюю структуру • Каждое следующее правило получает «обновлённый» предыдущим правилом адрес • Если после полного прогона правил адрес поменялся, прогон нужно повторить • Тысяча правил → Один фактический редирект
  10. http://ya.ru/catalog/noski/red.html?id=117&size=xs Если протокол = HTTP, сменить протокол на HTTPS https://ya.ru/catalog/noski/red.html?id=117&size=xs

    Если домен ya.ru, добавить в начало www https://www.ya.ru/catalog/noski/red.html?id=117&size=xs Если параметр size равен xs, сменить на параметр size на m https://www.ya.ru/catalog/noski/red.html?id=117&size=m
  11. Прочие функции • Импорт из CSV / Бэкап + восстановление

    • История переходов (со списком сработавших правил) • Лог бесконечных циклов • Лог 404 ошибок (из них можно сразу сделать редирект) • Подробная справка в модуле • Стандартные редиректы
  12. Стандартные редиректы • www • /index.php • / в конце

    адреса • https • //// → / • регистр букв