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

Редиректор

 Редиректор

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 • //// → / • регистр букв