Просмотров: 6970 (Статистика ведётся с 06.02.2017)
  • Нужно, чтобы страница вида:
    /gospel/pericope/?ELEMENT_ID=545&SECTION_ID=208

    откликалась на адрес вида:

    /gospel/pericope/545/208/

    Создайте правило с параметрами:

    • Условие: #^/gospel/pericope/([0-9]+)/([0-9]+)/#
    • Компонент:
    • Файл: /gospel/pericope/index.php
    • Правило: ELEMENT_ID=$1&SECTION_ID=$2

  • Как можно вручную настроить ЧПУ, используя символьный код разделов инфоблока.

    Например, для ЧПУ-пути /some_sef_folder/section_code/, где section_code - символьный код секции. ЧПУ-правило будет:

       array(
          "CONDITION"   =>   "#^/some_sef_folder/([0-9a-zA-Z-]+)/.*#",
          "RULE"   =>   "SECTION_CODE=$1",
          "ID"   =>   "",
          "PATH"   =>   "/real_script_path/index.php",
       ),

    В скрипте /real_script_path/index.php в настройках компонента параметру символьного кода секции нужно указывать $_REQUEST['SECTION_CODE']

    Для ЧПУ-пути /some_sef_folder/section_code/element_id.php, где section_code - символьный код секции, а element_id - целочисленный код элемента. ЧПУ-правило будет:

       array(
          "CONDITION"   =>  "#^/some_sef_folder/([0-9a-zA-Z-]+)/([0-9]+)\.php.*#" ,
          "RULE"   =>  "SECTION_CODE=$1&ELEMENT_ID=$2" ,
          "ID"   =>   "",
          "PATH"   =>  "/real_script_path/index.php" ,
       ),

    В скрипте /real_script_path/index.php компоненту нужно передавать $_REQUEST['SECTION_CODE'] и $_REQUEST['ELEMENT_ID'] соответственно.

    some_sef_folder - ЧПУ-путь, может не существовать реально на сервере.
    real_script_path - путь к реальному скрипту-обработичку на сайте, который будет генерировать результат.


  • Для случаев:
    1. Один из разделов каталога (site.ru/каталог/название_раздела1/) выводить по адресу site.ru/другое_название_раздела1/
    2. Одну из статей (site.ru/статьи/название_статьи1/) выводить по адресу site.ru/другое_название_статьи1/
    3. Один из подразделов (site/раздел/подраздел/) выводить по адресу site.ru/новое_название/
    4. Одну из статей (site.ru/раздел/статьи/название_статьи2/) выводить по адресу site.ru/другое_название_статьи2/

    Подойдёт правило:

    • Условие: /другое_название_раздела1/
    • Компонент:
    • Файл: #^/каталог/название_раздела1/#
    • Правило:

    Пример приведёт для первого случая, остальные варианты аналогичны.


  • Есть правило:
    • Условие: #^/([^/]*)-([^-]*)#
    • Компонент:
    • Файл: /catalog/index.php
    • Правило: PARENT_SECTION_CODE=$1&SECTION_CODE=$2&

    Пути вида: http://site.com/код раздела_код подраздела не обрабатываются этим правилом.

    Причина: знак минус в выражении [^-] воспринимается как служебный, обозначающий диапазон, а служебные символы нужно предварять знаком "\", т.е. писать вместо минуса "\-". Однако этого недостаточно если код подраздела состоит не только из символов, например: "1-xxxx", "2-xxxx".

    Причина в первом квантификаторе в первых круглых скобках, действие которого нужно ограничить знаком "?". Конечное условие: #^/(R.*?)\-(.*)/#


  • Два правила.

    Правило:

    • Условие: #^/cat/([a-z0-9\_]+)/([a-z0-9\_]+)*#
    • Компонент:
    • Файл: /cat/test.php
    • Правило: SECTION_CODE=$1&ELEMENT_ID=$2

    для site.ru/cat/razdel/element/ откроет тоже самое, что и для site.ru/cat/razdel/

    Лучше сделать два правила. (Использование двух правил допускается системой).

    Первое:

    • Условие: #^/cat/([a-z0-9\_]+)/(\d+)/\?(.*)?#
    • Компонент:
    • Файл: /cat/test.php
    • Правило: SECTION_CODE=$1&ELEMENT_ID=$2&$3

    Второе:

    • Условие: #^/cat/([a-z0-9\_]+)/([a-zA-Z]{1}[a-zA-Z0-9]*)/\?(.*)?#
    • Компонент:
    • Файл: /cat/test.php
    • Правило: SECTION_CODE=$1&ELEMENT_CODE=$2&$3

  • Надо сократить урл. Например, вместо http://epic.tm/catalog/men/ выводить http://epic.tm/men/.

    1) Создайте файл /catalog/list.php следующего вида:

    <?
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
    $APPLICATION->SetTitle("Показ раздела");
    ?>
    
    <pre><?print_r($_REQUEST);?></pre>
    
    <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

    2) Добавьте правило в /urlrewrite.php:

       array(
          "CONDITION"   =>  "#^/([^\\/]+)/($|index\\.php|\\?.*)#" ,
          "RULE"   =>  "SECTION_CODE=$1" ,
          "ID"   =>   "",
          "PATH"   =>  "/catalog/list.php" ,
       ),

    3) Откройте в браузере страницу http://epic.tm/men/. Если у вас показывается страница /catalog/list.php, значит, всё сделано правильно. Разместите на этой странице вызов компонента bitrix:catalog.section и настройте компонент.

    4) Поправьте поле "URL страницы раздела" в настройках соответствующего инфоблока.


  • Как настроить ЧПУ если используется catalog:sections и element:detail вместо комплексного компонента. Ссылки на разделы каталога должны иметь вид /catalog/section-name/, а на товары /catalog/section-name/element-name/.

    1) Создайте два правила:

    • Условие: #^/catalog/([\w,-]+)/([^/]*)#
    • Компонент:
    • Файл: /catalog/index.php (в этом файле у вас вызов компонента catalog.sections)
    • Правило: SECTION_CODE=$1
    и
    • Условие: #^/catalog/([\w,-]+)/([\w,-]+)/([^/]*)#
    • Компонент:
    • Файл: /catalog/detail.php (в этом файле у вас вызов компонента element.detail)
    • Правило: SECTION_CODE=$1&ELEMENT_CODE=$2

    2) В настройках инфоблока каталога укажите:
    URL страницы раздела: #SITE_DIR#/catalog/#SECTION_CODE#/
    URL страницы детального просмотра: #SITE_DIR#/catalog/#SECTION_CODE#/#ELEMENT_CODE#/

    3) В настройках компонентов укажите:
    Код раздела: ={$_REQUEST["SECTION_CODE"]} (для компонента catalog.sections) Код раздела: ={$_REQUEST["ELEMENT_CODE"]} (для компонента element.detail)


  • Обработка адресов поддерживает регулярные замены. Пример объединения трех правил (для трех языков) в одно:
    • Условие: #^/([de|ru|ua]+)/products/test/([0-9]+)(.*)#
    • Компонент:
    • Файл: /$1/products/test/index.php
    • Правило: SECTION_CODE=$2

  • Если в системе обработки адресов зарегистрировано правило:
    • Условие: #^/gallery/#
    • Компонент:
    • Файл: /max/images/index.php
    • Правило:

    и пользователем запрошена страница /gallery/38.php, которая физически не существует, то система обработки адресов подключит скрипт /max/images/index.php.


  • Если в системе обработки адресов зарегистрировано правило:
    • Условие: #^/index/([0-9]+)/([0-9]+)/#
    • Компонент:
    • Файл: /newforum/index.php
    • Правило: mode=read&CID=$1&GID=$2

    и пользователем запрошена страница /index/5/48/, то будет подключен скрипт /newforum/index.php?mode=read&CID=5&GID=48.


  • Если в системе обработки адресов зарегистрировано правило:
    • Условие: #(.+?)\\.html(.*)#
    • Компонент:
    • Файл:
    • Правило: $1.php$2

    и пользователем запрошена страница /about/company.html?show, то будет подключен скрипт /about/company.php?show.

  • Документация по теме:


    25


    Курсы разработаны в компании «1С-Битрикс»