We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 46816
    • 3 Posts
    Здравствуйте!

    Собрал сайт на MODx Revo. При переносе на старый домен заказчик попросил чтобы старые страницы не потерялись из поиска.

    Старые страницы открывались по адресам вида
    index.php?action=about (страница о компании)
    index.php?action=news (список новостей)
    index.php?action=news&id=70 (одна новость)

    Для решения создал раздел для старых страниц отдельный раздел, перенес туда все материалы, создал редиректы используя
    Redirector 2.0.8-pl

    Столкнулся со следующими проблемами:
    1. С такими шаблонами редиректы не работают вообще !!!
    index.php?action=about
    index.php?action=news

    2. С некоторыми из таких шаблонов редиректы не работают !!!
    index.php?action=news&id=70

    3. В таблице редиректора многие строки не обновляются после редиректов (в случае если редирект сработал)
    То есть во многих строках после успешного редиректа в таблице в столбце Triggered остается 0 и не заполнено Last time triggered

    Если 3-я проблема для меня не критична, то первые 2 мне нужно срочно исправить. Подскажите, пожалуйста, что мне делать...

    Спасибо!
      • 52243
      • 114 Posts
      Проблема в index.php, Redirector предполагает нормальные ЧПУ. В данном случае надо отлавливать плагином GET данные и использовать для редиректа.

      1. Используем какое нибудь поле, например link_attributes, пишем туда значение action из исходных ссылок, например about для страницы "О компании"

      2. Создаем плагин на событие OnWebPageInit, который будет ловить GET данные в URL и в случае наличия например action=home ищем документ с home в поле link_attributes, получаем его id, создаем на него ссылку и делаем 301 редирект.

      <?php
      if ($modx->event->name == 'OnWebPageInit' && !empty($_GET['action'])) {
      	$oldUrl = $_GET['action'];
      	$page = $modx->getObject('modResource', array(
      		'link_attributes' => $oldUrl,
      		'published' => 1,
      		'deleted' => 0
      	));
      	$id = $page->get('id');
      	$url = $modx->makeUrl($id);
      	$modx->sendRedirect($url, array(
      		'responseCode' => 'HTTP/1.1 301 Moved Permanently'
      	));
      }


      С ссылками типа action=news&id=70 несколько сложнее, но думаю что id уникальный и ловить его можно точно таким же способом. Если не получится реализовать - напишите мне на почту или в skype, разберемся.