Редирект 301 в MODX Revo и Evo
Когда я впервые переносила сайт с WordPress на MODX, то столкнулась с проблемой настройки редиректа. Обычно для перенаправления на новые страницы в файл .htaccess используют стандартное правило:
Redirect 301 /old-page.html https://new-domain.ru/new-page.html
Но в MODx этот способ не работает. При редиректе в ссылках появлялются лишние символы и выглядят они примерно так:
https://new-domain.ru/new-page.html?q=new-page.html
Пользователи при этом перенаправляются на страницу с 404 ошибкой.
Оказалось, что для настройки 301 редиректа нужно использовать другие решения.
Редирект 301 для MODX Revolution
Первый и самый простой вариант — воспользоваться готовым дополнением. Компонент Redirector можно установить на свой сайт из админ.панели в разделе «Управление пакетами». После установки в меню админки в разделе «Компоненты» появляется новый пункт — «Управление редиректами». Заходим и видим пока еще пустой список редиректов.
Нажимаем кнопку «Создать новый редирект» во всплывающем окне пишем правило:
Шаблон — url старой страницы без первого слеша, например old-page.html
Цель — полный адрес новой страницы https://new-domain.ru/new-page.html
Директива RewriteRule дает нам много возможностей для перенаправления страниц на новые адреса, а главное, ее можно использовать при разработке сайтов на MODx Revolution.
Вот как можно сделать перенаправление с одной страницы на другую
RewriteRule ^page1.html$ /page2.html [R=301,L]
Напомню, что я переносила свой сайт с WordPress, и url статей включали название рубрик. На новом сайте я не собиралась использовать вложеные ссылки, кроме того, мне необходимо было добавить к ссылкам префикс .html
Чтобы при переходе по ссылке типа https://domain.ru/category/postname/ пользователи и поисковые машины были перенаправлены на страницу типа https://domain.ru/postname.html в файле .htaccess после строк
RewriteEngine On RewriteBase /
добавляем
RewriteRule ^category/(.*)/$ /$1.html [R=301,NC,L]
Редирект 301 для MODX Evolution
Для тех, кто предпочитает версию Evolution тоже есть простое решение настройки редиректа — плагин RedirectMap. Расскажу, как установить его на свой сайт.
Элементы>> Управление элементами>> Плагины
Создаем новый плагин с именем RedirectMap (хотя на самом деле, не имеет значения, как вы его назовете, хоть Gorshok — плагин все равно будет работать).
На вкладке «Общие» вводим код плагина:
global $modx; $mapChunk = $modx->getChunk($chunk); $mapLines = explode("rn",$mapChunk); $mapArr = array(); foreach($mapLines as $line) { list($link,$redirectId) = explode('||',$line); $mapArr[$link] = $redirectId; } $q = $_REQUEST['q']; if(isset($mapArr[$q])) { $url = $modx->makeUrl($mapArr[$q]); $modx->sendRedirect($url,0,'REDIRECT_HEADER','HTTP/1.1 301 Moved Permanently'); exit(); }
Переходим на вкладку «Конфигурация», вводим:
&chunk=Чанк с картой редиректов;text;redirect
На вкладке «Системные события» выбираем OnPageNotFound
Далее нам нужно создать новый чанк с названием redirect, где будет храниться список всех наших редиректов. Пример содержания чанка:
old_page.html||12
Где old_page.html — url старой страницы без первого слеша, 12 — id документа, на который будет идти перенаправление. Каждый редирект пишем с новой строки. Сохраняем чанк и проверяем, работает ли переадресация.
Еще по теме: