We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 2938
    • 18 Posts
    Добрый вечер.

    Столкнулся с такой проблемой. Есть старый сайт (который находится в корне public_html) на Drupal. Создали новый сайт на ModX и поставили вместо старого. Поисковики ссылаются на старый сайт, используя старые адреса страниц. Эти страницы есть в новом сайте, но по другому адресу.
    В файле .htaccess создал редирект 301:
    Redirect 301 /index.php?Itemid=11&col=10 http://www.мой-сайт.ru/catalog/aromas/232

    Когда вводишь, или переходишь с поисковика по адресу http://www.мой-сайт.ru/index.php?Itemid=11&col=10 редирект на страницу http://www.мой-сайт.ru/catalog/aromas/232 не срабатывает, а открывает только главную страницу сайта. Как правильно выполнить перенаправление с одной страницы на другую в пределах одного сайта?
      • 33646
      • 26 Posts
      вопросик экранировать надо, это служебный символ
        • 2938
        • 18 Posts
        Quote from: Zuba at Feb 08, 2011, 07:51 AM

        вопросик экранировать надо, это служебный символ

        Как это? Объясните пожалуйста
          • 33646
          • 26 Posts
          ну например так \? или даже полностью заменив на \%3f
          строго говоря для спецсимволов надо применять несколько другие правила, вот пример из мануала
          'noescape|NE' (не экранировать URI при выводе)
          
          Этот флаг не даёт mod_rewrite применять обычные правила экранирования URI к результату преобразования. Обычно, специальные символы (такие как '%', '$', ';', и так далее) будут экранированы их шестнадцатиричными подстановками ('%25', '%24', и '%3B', соответственно); этот флаг не дает это делать. Это позволяет символам процента появлятся на выходе , как в
          
          RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
          
          для которого '/foo/zed' преобразовывалось бы в безопасный запрос '/bar?arg=P1=zed'.
          
            • 2938
            • 18 Posts
            Quote from: Zuba at Feb 08, 2011, 10:22 PM

            ну например так \? или даже полностью заменив на \%3f
            строго говоря для спецсимволов надо применять несколько другие правила, вот пример из мануала

            Возможно вы меня не так поняли...
            Этот адрес /index.php?Itemid=11&col=10 не существовал, и не существует на новом сайте Modx. Он остался в индексе поисковиков, когда был сайт старый, на Друпале. Мне бы хотелось сделать редирект посетителей по этой ссылке на новую, /catalog/aromas/232, с сохранением в дальнейшем PR страницы.
            Если я делаю редирект со страницы /catalog/aromas/232 на www.мой-сайт.ru/index.php?Itemid=11&col=10, то в данном случае перенаправление в htaccess срабатывает.
              • 33646
              • 26 Posts
              попробуйте другой способ

                • 2938
                • 18 Posts
                Прописал так:
                RewriteCond %{QUERY_STRING} Itemid=11
                RewriteRule index \.php http://www.site.com/catalog/aromas/232 [R=301,L]
                

                В результате дает 500 ошибку на весь сайт.
                  • 33646
                  • 26 Posts
                  ошибка из-за пробела перед \.php
                    • 2938
                    • 18 Posts
                    Убрал пробел. Ошибка 500 пропала. Но возникла новая проблема:
                    Редирект срабатывает на указанный адрес. Вот только к концу адреса апач добавляет:

                    www.site.com/catalog/aromas/232?q=catalog/aromas/232&q=catalog/aromas/232&q=catalog/aromas/232&q=catalog/aromas/232&Itemid=11


                    Чем это вызвано?
                      • 33646
                      • 26 Posts
                      это связно с тем, что у вас в htaccess есть еще одно правило. Если быть точнее то правило на ЧПУ от MODX

                      что можно сделать?

                      RewriteCond %{QUERY_STRING} ^Itemid=11
                      RewriteRule index\.php http://www.sute.com/blablabla/ [R=301,L]
                      


                      проверил у себя, работает.. кое что изменилось в первой строке laugh

                      p.s. по результату отпишитесь сюда