Вход • Регистрация

знак плюса (+) в ЧПУ

  • 21 августа 2016 г.
  • Здравствуйте! Если ставишь в ЧПУ знак плюса (+) то при заходе на страничку получаем 404.
    Пробовал и на своем сайте и на http://demo.diafan.ru/

    Критически надо решить вопрос. Кто сталкивался? Какие идеи?
    • 22 августа 2016 г.
    • Работать надо с апачем (или нжинксом), видимо, он эти символы на уровне сервера обрабатывает, как служебные и до htaccess и CMS дело не доходит .
      Чаще всего плюсы Апачем интерпретируются как пробелы и устраняются.
      Попробуйте запросить существующую страницу сайта по её адресу и с плюсами site.ru/catalog+++/, если корректно ответит site.ru/catalog/ значит точно апач рубит плюсы
  • 22 августа 2016 г.
  • Проверить очень просто. Делаете 1.php, там пишете
    Код
    <?php
    echo $_GET["a"];
    ?>

    и запрашиваете site.ru/1.php?a=aaa+aaa
    И смотрите, что выходит.
    Варианты :

    • aaa+aaa
    • aaaaaa
    • aaa
    • 23 августа 2016 г.
    • Не, это не в GET это именно в чпу. В любую ЧПУ любой страницы плючик ставим и колпак. Хоть даже на demo.diafan.
      Мигрирую с битры, там олень один плюсиков понаставил, он она отрабатывает.

      Подозрение были либо на редиректы htacess либо на парсер URL диафана. В ТП подсказали:
      if(strpos($_SERVER["REQUEST_URI"], '+') !== false)
      {
      $_GET["rewrite"] = preg_replace('/^\/'.(REVATIVE_PATH ? preg_quote(REVATIVE_PATH, '/').'\/' : '').'/', '', $_SERVER["REQUEST_URI"]);
      $_GET["rewrite"] = preg_replace('/\?([^\/])*$/', '', $_GET["rewrite"]);
      }
      в index.php

      было бы круто конечно на уровне htaccess пофиксить, но скилл не позволяет )
      • 23 августа 2016 г.
      • Цитата
        Не, это не в GET это именно в чпу.
        А GET - это не ЧПУ? Любой адрес с помощью mod_rewrite превращается в GET rewrite.

        Попробуйте сами на любом сайте на DIAFAN.CMS, страница site.ru/news/ = site.ru/?rewrite=news/

        Всё, что приходит в адрес после корня домена, вся текстовая строка с помощью mod_rewrite (плагина апача) передается в одну единственную переменную $_GET["rewrite"].
        DIAFAN.CMS работает с этой переменной, разбирает её, ищет в БД совпадения ЧПУ и т.д.

        Не надо искать подвоха на стороне CMS, это вообще не там. Механизм примитивнейший донельзя:
        1. Вы запросили site.ru/adres_stranicy/bla-bla/
        2. Сервер, в лице mod_rewrite превратила это в конструкцию site.ru/?rewrite=adres_stranicy/bla-bla/ и передала в DIAFAN.CMS
        3. DIAFAN.CMS отбрасывает окончание "/" (согласно настройкам сайта), и идет в БД искать страницу со строкой adres_stranicy/bla-bla. Находит - выводит. Не находит - 404.
        Всё!

        Теперь другая ситуация:
        1. Вы запрашиваете site.ru/adres+stranicy/bla+bla/
        2. Сервер, в лице mod_rewrite превратила это в конструкцию site.ru/?rewrite=adresstranicy/blabla/ и передала в DIAFAN.CMS
        3. DIAFAN.CMS отбрасывает окончание "/" (согласно настройкам сайта), и идет в БД искать страницу со строкой adresstranicy/blabla. И не находит, так как в БД указано adres+stranicy/bla+bla!
        Вот Вам и 404!

        То есть, роль DIAFAN.CMS тут минимальна: взять строку и искать её в БД. И если Апач режет плюсики, и подсовывает CMS-ке коцанную строку, извините.

        Я поэтому и говорю,
        Цитата

        Код
        <?php
        echo $_GET["a"];
        ?>

        и запрашиваете site.ru/1.php?a=aaa+aaa
        И смотрите, что выходит.

        Если плюсик не выходит, идете в ТП хостинга, и просите сконфигурировать Апач так, чтобы выходил. Как только этот скрипт 1.php начнет выдавать строку с +, заработает и ЧПУ с плюсиками в DIAFAN.CMS
        • 23 августа 2016 г.
        • Весьма занимательная лекция. Много нового узнал
          Будем разбираться.

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум