Проблема с событием OnWebPageInit в evo 1.2.1

Добрый день!

Делаю свой кастомный роутинг в evo 1.2.1.
Использую для этого плагины на события OnPageNotFound и OnWebPageInit,
отключив в htaccess перенаправление на https и добавление www,
с тем, что бы самому делать редирект на https:// www. — внутри плагина и делать попутно другие действия.

Столкнулся со следующей проблемой: при обращении к http:// site.ru или к https:// site.ru (в обоих случаях, без www) — плагин с событием OnWebPageInit — не срабатывает (при том, что он штатно срабатывает при обращении к https:// www.site.ru).
Соответственно, https и www не добавляются, хотя сама страница и отображается в браузере.

Подскажите, пожалуйста, в чем может быть проблема? В какую сторону копать?

Заранее большое спасибо!

10 комментариев

avatar
Актуальная версия ветки 1.х. 1.4.11

Рекомендовал бы обновиться.
Редиректы с http и www нужно делать через htaccess или конфиг nginx

avatar
Редиректы с http и www нужно делать через htaccess или конфиг nginx
Это правильно так делать, потому что срабатывают как можно раньше. Но всё таки у человека есть потребность в таком поведении системы. Возможно обновления помогут. Попробуй добавить сайт без www в assets/cache/siteHostnames.php если конечно в той старой версии он используется.
avatar
Спасибо за совет с siteHostnames!
Попробую, может быть поможет.
Комментарий отредактирован 2020-10-10 19:49:29 пользователем skor
avatar
Да, надо обновиться, но там все непросто — сайт старый и оброс кучей разных пользовательских сниппетов, плагинов и модулей.

Мне на хостинге не смогли (не захотели) включить в конфиге директиву RewriteMap lc int:tolower, из-за чего в htaccess не работает lowercase и не получается сделать один общий 301 редирект. Получается цепочка из двух редиректов и SEO-оптимизаторы недовольны.

А Вы считаете, что редиректы нужно делать через htaccess, с точки зрения скорости? Я не заметил какого-то уменьшения скорости.
Или есть другие причины?
avatar
Если редирект делать через htaccess или nginx то до системы (modx evo) дело дойдет один раз. А так получается цепочка:
браузер -> запрос -> сервер(apache/nginx) -> modx evo(поработал) -> ответ(редирект) и по новой запрос -> сервер -> modx evo ->правильный ответ(нужная страница).
На современных хостингах незаметно конечно.
avatar
Через htaccess получается, что если, к примеру, мы обратились к http:// site.ru/paGe, то сервер сделал редирект на https:// www.site.ru/paGe — это первый редирект.
Теперь modx проверяет URI и видит там заглавную букву и делает второй редирект на https:// www.site.ru/page — получилась цепочка.
Так идея была убрать из htaccess правила для https и www — пусть modx сразу все делает: https, www, lowercase и другие проверки — а потом делает один единственный редирект.
avatar
Да, можно сделать правила htaccess и такие.
Но лучше сделать цепочку правил.
И получится что запрос пройдет всю цепочку (правил/преобразований) пока не дойдет до конца или не встретит правила с флагом [R] или [L]
avatar
Спасибо за совет, попробую.
avatar
Логично что б все было там где надо а не костылями.
А по части хостинга проще сменить его это быстро и хостингов адекватных полно.
avatar
Да, с этим не поспоришь, если только ты не заказчик :)
Комментарий отредактирован 2020-10-10 23:45:49 пользователем skor
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.