[easyRedirects] Еще один компонент для управления редиректами

Привет!

easyRedirects — дополнение для управления редиректами (с возможностью выбора кода ответа из 301, 302, 307, 308) в панели управления сайтами.

Для MODX есть несколько компонентов, которые позволяют из админки управлять редиректами со старых url на новые. Из тех, что знаю я — это Redirector (наверное самый первый компонент, ему 10+ лет точно, но надо сказать, его периодически обновляют), и autoRedirector. Кстати, они поддерживают только 301 редирект, а вот 302 или более свежие 307 и 308 — нет.

При попытке применить их на моем сайте выплыли проблемы:
1. Redirector не позволял создать редирект на произвольный url, он обязательно хотел видеть в качестве цели существующий ресурс. А мне так не нужно было, у меня страницы генерируются своим плагином, обрабатывающим событие OnPageNotFound, т.е. целевого ресурса как такового на сайте нет.
2. autoRedirector больше заточен на отслеживание измененных url, ну и у него та же особенность — конечный url редиректа должен принадлежать существующему ресурсу.

В общем в итоге пара вечеров и готова первая версия easyRedirects. По сути это сильно модифицированный и дополненный Redirector.




Возможности:

  • создание произвольного кол-ва редиректов в адмике;
  • создание нового редиректа путем копирования существующего;
  • можно задать код ответа сервера (301, 302, 307, 308);
  • для редиректа можно указать как просто адрес (напр. catalog/telefony => catalog/phones) так и регулярное выражение с подстановками (напр. ^catalog\/category-(.*)$ => catalog/$1);
  • для каждого редиректа считается кол-во срабатываний, дата и время первого и последнего срабатывания;
  • можно для каждого редиректа задать метку, чтобы в дальнейшем проще их находить (например, написать «этап 1», «старые редиректы» и т.п.);
  • для каждого редиректа в базе есть запись когда и кем он создан или изменен (поля createdon, createdby, updatedon, updatedby);
  • есть отслеживание смены url страниц сайта (без учета вложенности правда), см. системную настройку easyredirects_track, работает так же как в компоненте Redirector;
  • есть импорт правил из текста в формате csv.
Ссылка на пакет:
modstore.pro/packages/utilities/easyredirects

Ссылка на github:
github.com/createit-ru/easyRedirects

Если вам пригодился компонент, есть желание поблагодарить чашкой кофе — можно сделать это нажав на кнопочку:



Благодарности ускорят внедрение новых функций, увеличат мою мотивацию, заставят меня внимательно прислушиваться к вашим пожеланиям!!!


Обновления (детали доступны в changelog.txt):
28.11.2023 — 1.0.1-pl
19.12.2023 — 1.1.0-pl — выбор кода ответа сервера, улучшена поддержка MODX 3
Наумов Алексей
27 ноября 2023, 16:29
modx.pro
8
2 216
+13

Комментарии: 18

brioni
27 ноября 2023, 17:50
+1
Огромное человеческое спасибо 🙏
Тоже намучился с Redirector, что в итоге пришлось CloudFlare подключать на сайты для нормальных редиректов.
А ещё у Redirector глюк с базой данный и редиректами между контекстами

Донат прилагается 😎
    Наумов Алексей
    27 ноября 2023, 18:44
    0
    Спасибо! Да, я в Redirector что-то не всю логику понял, и возможно что оттуда ко мне тоже глюки переехали…
    Проведу еще тесты на срабатывание редиректов, если что поправлю и обновлю компонент.

    Правда вот с контекстами вряд ли смогу, т.к. на своих сайтах их не применяю.
    Не получится точнее описать, с какими неточностями столкнулись?
      brioni
      30 ноября 2023, 20:31
      0
      Привет. не пойму как сделать 301 главной страницы на внешний сайт.

      Пробую: index ИЛИ / ИЛИ index.html -> modx.pro/components/24389

      главную удаляю, но редиректа не происходит
        Наумов Алексей
        01 декабря 2023, 10:47
        0
        привет! Конкретно для главной страницы конечно спорный вопрос… я бы через компонент не делал. Обычно такие редиректы нужны когда сайт переезжает на другой адрес. В этом случае рациональнее сделать редирект всего сайта средствами nginx или через htaccess, смотря какой сервер.

        Дело в том, что у главной страницы uri — index, а url, который открываем в браузере — пустой.
        Чтобы компонент смог обработать такой редирект — нужно прям отдельное условие добавить в код…
          brioni
          11 декабря 2023, 13:12
          0
          Буду признателен, если такое условия появится в коде easyRedirects. Для мультиязычных сайтов на разных контекстах — редирект главной большая проблема. Спасибо
            brioni
            11 декабря 2023, 13:15
            0
            Супер, если появится правило, которое будет редиректить весь контекст на другой контекст. через htaccess этого не сделать — приходится клаудфраер подключать…
              Наумов Алексей
              11 декабря 2023, 13:36
              0
              не совсем я понял суть задачи…
              но почему бы не сделать через регулярное выражение?
              отсюда: ^en/(.*)$
              сюда: ru/$1
              но естественно, что это сработает, только если все страницы сайт.ру/en/ не будут опубликованы, т.к. компонент работает через плагин на OnPageNotFound
      Сергей
      04 декабря 2023, 11:52
      0
      Приветствую! Было бы круто, если бы компонент автоматически проставлял 301 редирект при смене адреса страницы, товара… Я не смог найти компонент, который бы автоматически их ставил, если товары выгружаются из 1с или из файла xls. Речь идет о msImportExport и о mSync
        Наумов Алексей
        04 декабря 2023, 12:20
        0
        И Redirector, и autoRedirector и easyRedirects имеют в своём составе плагин, который висит на событии OnDocFormSave и отслеживают изменение url ресурса.

        Но есть одно но) Все компоненты для того чтобы узнать какой был старый url у страницы — они его сохраняют где-то заранее, к примеру на событии OnBeforeDocFormSave (в properties ресурса) или OnDocFormRender (в сессию). И только потом на OnDocFormSave уже идет сравнение старого адреса и нового и при необходимости создание редиректа.
        Ну в общем то любой компонент для импорта событие OnDocFormRender точно не вызовет.
        В принципе OnBeforeDocFormSave в autoRedirector вроде как должен срабатывать, если msImportExport обновляет товар через процессор resource/update… но не знаю, не разбирался.

        В общем для них лучше свой плагин написать с созданием правил редиректа (благо там и нужно то заполнить 2 поля минимально), насколько помню у того же msImportExport есть событие, куда приходят данные при обновлении товара.
          Сергей
          05 декабря 2023, 11:53
          0
          Спасибо за развернутый ответ)
        deleted
        05 декабря 2023, 12:12
        0
        При попытке применить их на моем сайте выплыли проблемы:
        1. Redirector не позволял создать редирект на произвольный url, он обязательно хотел видеть в качестве цели существующий ресурс. А мне так не нужно было, у меня страницы генерируются своим плагином, обрабатывающим событие OnPageNotFound, т.е. целевого ресурса как такового на сайте нет.
        2. autoRedirector больше заточен на отслеживание измененных url, ну и у него та же особенность — конечный url редиректа должен принадлежать существующему ресурсу.
        Есть ещё Seo Suite. Не знаю, есть ли там такие проблемы
          brioni
          26 декабря 2023, 14:27
          0
          Алексей, будет супер, если поиск по полю метка тоже будет работать
            Наумов Алексей
            26 декабря 2023, 15:46
            0
            Привет, да, поправлю, сам заметил
              Наумов Алексей
              27 декабря 2023, 14:16
              0
              Готово! Обновись, проверь работу!
                brioni
                25 января 2024, 12:39
                0
                Отлично. Спасибо 🙏
                Было бы супер добавить кнопку копировать редирект, чтобы не заполнять каждый раз заново
                  Наумов Алексей
                  25 января 2024, 14:09
                  0
                  Можно попробовать реализовать… запишем.
                  Рад активному пользователю =)
                    Наумов Алексей
                    13 февраля 2024, 11:43
                    0
                    Сделал, выложил!
                      brioni
                      13 февраля 2024, 11:54
                      0
                      Это очень хорошо, спасибо 🙏
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                18