We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 26709
    • 4 Posts
    Привет всем.
    Делая очередной сайт, столкнулся с такой проблемой - на сайте не работают внутренние редиректы. Например, если задать в .htaccess правило для mod_rewrite:


    RewriteRule ^cat/(.*)$ index.php?id=$1 [L]

    То по всем правилам, если перейти по ссылке /cat/1 то в адресной строке браузер адрес остается как /cat/1, а открывается страница /index.php?id=1 . Т.е. должен быть ВНУТРЕННИЙ редирект. Такая же беда происходит, если делать редирект через HEADER
    Но у меня происходит ВНЕШНИЙ РЕДИРЕКТ - т.е. адрес меняется с /cat/1 на /index.php?id=1. Что я только не перебробовал, не помогает. Этот гадский внешний редирект уже на нервы начал действовать.
    Потестил на других серверах = все нормально.

    После нескольких дней мучений оказалось, что всему виной - плагин Seo strict URLs. Если его отключить, то все начинает корректно работать. Отсюда вопрос - кто знает, как настроить этот плагин так, чтобы он не мешал внутреннему редиректу. У меня просто сейчас катастрофически не хватает времени внедряться в логику этого плагина. Может кто-то сталкивался с подобным и нашел какой-то выход. Либо есть какая-то альтернатива Seo strict URLs без этого неприятного эффекта. Заранее спасибо.
      • 26709
      • 4 Posts
      Ответ нашелся. Если нужно, чтобы работал и этот плагин и mod_rewrite с внутренними редиректами, то достаточно в коде плагина сделать исключения для определенных УРЛов, на которых плагин не будет работать.

      Поясню на примере.
      Если, например, нам нужно создать правило для mod_rewrite :

      RewriteRule ^cat/(.*)$ index.php?id=$1 [L,QSA]

      и чтобы это правило корректно работало и плагин не мешал делать внутренние редиректы, то в начале кода плагина вставляем следующее:


      $url = parse_url($_SERVER[REQUEST_URI]);
      $url_array=explode("/",$url[’path’]);
      $link=array_pop($url_array);
      $path=implode("/",$url_array);
      $domain = substr($modx->config[’site_url’], 0, strlen($modx->config[’site_url’])-1);

      сразу после этого добавляем:


      if ($path!="/cat") {

      // а тут код самого плагина

      }

      Получается, что плагин сработает только когда путь не равен /cat.
      Т.е. /cat/1 , /cat/2 и обработаются mod_rewrite корректно.

      Конечно, немного криво, но зато работает.