Cotonti / Open Source PHP Content Management FrameworkContent Management Framework

Foren / National / Russian / Тех. поддержка / Как подружить ЧПУ и Redirect?

Некорректная работа Redirect с ЧПУ ссылками

Roffun
#45025 28. Juli 2020, 15:01
#45023 Дмитрий:

Да и понять хочется, почему в варианте с ЧПУ не работает и как это исправить. Для личного саморазвития))

Если есть желание понять суть проблемы, нужно обратиться к документации и принципу работы URL в Cotonti. Если речь идёт о ЧПУ значит подразумевается обработка URL. В Cotonti они модифицируются в двух местах:

  • UrlEditor - плагин для обработки URL
  • Серверный файл (htaccess или nginx зависит от настроек)

Если плагин включен и прописаны правила, это значит что движок будет отдавать содержимое по новым правилам, но сервер об этом ничего не знает, поэтому правила нужно добавить еще и в серверный файл. Для существующих адресов этого достаточно, но если речь идет о страницах которых не существует (в вашем случае движок подразумевает что хотите несуществующую страницу 404 переадресовать на новый адрес). Поэтому сырой URL (/index.php?e=page&c=manual&al=doc1) работает, ведь страница существует, а предыдущая ЧПУ не редиректится, потому что её как бы и не было, это просто ЧПУ редирект был. Если бы страница с которой редирект существовала, то всё сработало бы, а так приоритет отдаётся 404, отсюда и проблема с редиректом.

Решение вопроса находится над ситуацией, все вышеперечисленные варианты это лишь костыли в данном случае. Для понимания процесса нужно посмотреть документацию:  Что такое Хуки?

В подразделе 2.1. Основные хуки можно прочитать, что:

Некоторые хуки в системе вызываются практически всегда и строго в определенном порядке относительно друг друга:

  • input — самая первая точка расширения при выполнении скрипта. В текущей точке, несмотря на доступность основных данных (таких как конфигурация, структура, список расширений, данные пользователя) система еще не полностью инициализирована. Поэтому используйте этот хук осмотрительно и если надо переопределить некоторые системные данные на начальном этапе;

Как видно из описания, хук input вызывается на этапе инициализации, поэтому его можно переопределить только в этой точке. А плагин UrlEditor как раз в этом месте вызывает функцию cot_apply_rwr() в которой происходит дальнейшая логика ЧПУ.

Вывод: чтобы максимально влиять на ЧПУ, в том числа на удалённые/перемещённые URL, нужно делать это программно на уровне хука. Чтобы не писать дополнительный плагин, можно воспользоваться r301 от esclkm. После установки редирект можно добавлять из админки.

p.s. Если протокол сайта https, нужно изменить его и в файле input.php (плагин давно не обновлялся).

Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts