home chevron_right
3\) Правила ЧПУ: `prepare.urlrewrite` \+ `urlrewrite.add`

Что делаетlink

Эта связка отвечает за корректные правила ЧПУ (urlrewrite) на сайте:

  • prepare.urlrewrite — “нормализует” существующие правила (в вашей формулировке: перенос/перевод правил из папки в корень, а по реализации — встречается логика упрощения префикса каталога сайта в CONDITION).
  • urlrewrite.add — добавляет правила из отдельного файла (где лежит массив $arUrlRewrite) в системный /urlrewrite.php через API Bitrix.

Это обычно выполняется ближе к финалу мастера, когда:

  • сайт выбран,
  • файлы разложены,
  • нужный файл с правилами уже лежит на месте.

Какие данные ждётlink

urlrewrite.add ожидает параметр:

  • source — путь к PHP-файлу с массивом $arUrlRewrite

Файл-источник обычно выглядит так:

<?php
$arUrlRewrite = [
    [
        'CONDITION' => '#^/some/path/#',
        'RULE'      => '',
        'ID'        => '',
        'PATH'      => '/some/path/index.php',
        'SORT'      => 100,
    ],
];

Пример связки шаговlink

<?php

declare(strict_types=1);

use SIMAI\Wizard;

return [
    [
        'name'         => 'Подготовка urlrewrite',
        'code'         => 'prepare.urlrewrite',
        'autocomplete' => 'Y',
    ],
    [
        'name'         => 'Добавление правил ЧПУ',
        'code'         => 'urlrewrite.add',
        'autocomplete' => 'Y',
        'parameter'    => [
            'source' => Wizard::getLocal(__DIR__) . '/data/urlrewrite/urlrewrite.rules.php',
        ],
    ],
];

Где хранить файл правил в пакете решенияlink

Удобный вариант (и самый читаемый в документации решения) — держать файл правил внутри данных мастера:

  • <wizard_dir>/data/urlrewrite/urlrewrite.rules.php

Тогда мастер переносим между окружениями без “магии”.

Что проверить (smoke-check)link

  1. Файл source действительно возвращает корректный $arUrlRewrite и доступен на чтение.
  2. После выполнения шага новые правила появились в /urlrewrite.php и реально работают (быстрый тест — открыть один URL, который должен сработать по правилу).
  3. При повторном запуске мастера правила не дублируются (или дублируются предсказуемо — зависит от логики urlrewrite.add).