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

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

Дмитрий
#1 2020-07-25 09:04

Помогите пожалуйста настроить правильную работу Редиректа с ЧПУ ссылками.

У меня проблема вот в чем. После переноса страницы в другую категорию, понадобилось настроить обычный редирект в htaccess. Однако при использовании ЧПУ ссылок редирект работает некорректно.

Т.е. при использовании такой конструкции:

Redirect 301 /instructions /manual/doc1

Я получаю ссылку вида мой_сайт/manual/doc1?rwr=instructions и соотвестственно ошибку 404.

Но если использовать не преобразованную ссылку, например:

Redirect 301 /instructions /index.php?e=page&c=manual&al=doc1

То редирект работает нормально. Однако хотелось бы иметь привычный "красивый" вид ссылки. Можно ли этого добится?

jCube Group
#2 2020-07-25 13:56

пребел уберите.

Сделал группу в телеге https://t.me/Cotonti_help если что помогу с вопросами.
Дмитрий
#3 2020-07-25 17:30
#45016 jCube Group:

пребел уберите.

Что убрать? Не понял

Дмитрий
#4 2020-07-25 19:43

А зачем пробел убирать? Может я чего-то не понимаю, но это же стандартная конструкция параметра Redirect - Redirect 301 <старый URL> <новый URL>. И она всегда работает, за исключением этого случая с ЧПУ ссылками на Cotonti.

Ну а если я убираю там пробел, то получаю на выходе адрес мой_сайт/instructions/index.php?e=page&c=manual&al=doc1 и ошибку "Сайт выполнил переадресацию слишком много раз. ERR_TOO_MANY_REDIRECTS." Для работы параметра Redirect как-раз и необходимо 2 адреса, разделенных пробелом.

Если я не очень понятно обьяснил, что мне надо, то попробую подробнее. У меня была системная страница с алиасом instructions и она была перенесена в категорию manual, а её алиас сменен на doc1. Т.е. в данный момент мне нужно перенаправить пользователя со старого адреса - мой_сайт/instructions на новый адрес - мой_сайт/manual/doc1. И эта конструкция не работает, если использовать в качестве нового адреса ЧПУ ссылку и отлично работает если использовать прямую, без ЧПУ преобразования. 

kushelbek
#5 2020-07-27 12:28
#45014 Дмитрий:

Помогите пожалуйста настроить правильную работу Редиректа с ЧПУ ссылками.

У меня проблема вот в чем. После переноса страницы в другую категорию, понадобилось настроить обычный редирект в htaccess. Однако при использовании ЧПУ ссылок редирект работает некорректно.

Т.е. при использовании такой конструкции:

Redirect 301 /instructions /manual/doc1

Я получаю ссылку вида мой_сайт/manual/doc1?rwr=instructions и соотвестственно ошибку 404.

Но если использовать не преобразованную ссылку, например:

Redirect 301 /instructions /index.php?e=page&c=manual&al=doc1

То редирект работает нормально. Однако хотелось бы иметь привычный "красивый" вид ссылки. Можно ли этого добится?

у меня вот так работают норм:

Redirect 301 /portfolio/intensiv/Лэндинг-для-Школы-выездной-интесив https://domain.ru/index.php?e=page&c=web&id=79

Т.е куда редериктим пишем с полным адресом(http\https )

Дмитрий
#6 2020-07-27 18:55
#45022 kushelbek:

у меня вот так работают норм:

Redirect 301 /portfolio/intensiv/Лэндинг-для-Школы-выездной-интесив https://domain.ru/index.php?e=page&c=web&id=79

Т.е куда редериктим пишем с полным адресом(http\https )

Ну так и у меня работает) В принципе, функцию свою выполняет, и меня даже устраивает и такой вариант. Но хотелось бы чтобы все было красиво)

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

Edward
#7 2020-07-27 19:28

Ставите этот редирект выше стандартных?

Redirect 301 /instructions /manual/doc1

У меня nginx, но работают такие редиректы. Начало файла, до стандарнтых редиректов:

rewrite "^/zashchita-po-ugolovnym-delam" /voennyj-advokat-po-ugolovnym-delam permanent;

 

Email: ed.gabishev@gmail.com
Telegram: https://t.me/Ed_Gaba
Roffun
#8 2020-07-28 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