какое правило необходимо задать в файле urlrewrite php системы

Обработка адресов

Понятие обработки адресов

Обработка адресов (UrlRewrite) применяется для того, чтобы скрипт мог отвечать не только по своему физическому, но и по любому другому указаному адресу. Например, можно задать настройки обработки адресов, чтобы скрипт в файле /fld/c.php, отвечающий по адресу

отвечал также по адресу

Адрес, по которому будет отвечать скрипт, не должен физически существовать на сервере. Если такой адрес физически существует, то будет вызван скрипт по этому адресу. Система обработки адресов запущена в этом случае не будет.

Правила обработки

Правила обработки адресов настраиваются отдельно для каждого сайта и хранятся в корне сайта в файле urlrewrite.php. Файл содержит массив $arUrlRewrite, каждая запись которого является правилом обработки адреса. Файл urlrewrite.php имеет следующий вид:

Каждое правило должно содержать уникальное в рамках сайта условие выполнения правила. Условие выполнения записывается в ключ «CONDITION» массива и является шаблоном Perl-совместимого регулярного выражения. Например, условие:

указывает, что данное правило должно применяться для всех адресов, которые начинаются с подстрок вида:

Правило может содержать адрес физически существующего скрипта, который будет подключен при выполнении условия. Этот адрес записывается в ключ «PATH«. Например, если в системе обработки адресов зарегистрировано правило:

и пользователь запросил страницу:

которая физически не существует, то система обработки адресов подключит скрипт:

Правило может содержать правило замены, которое записывается в ключ «RULE«. Если правило замены установлено, то адрес реально существующего подключаемого скрипта формируется заменой регулярным варажением условия выполнения (шаблона выражения) на конкатенацию физического пути (ключ «PATH«) и правила замены (ключ «RULE«). Например, если в системе обработки адресов зарегистрировано правило:

и пользователем запрошена страница:

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

и будет подключен скрипт:

Если в системе обработки адресов зарегистрировано правило:

и пользователем запрошена страница:

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

и будет подключен скрипт:

Правило может содержать имя компонента, который создал это правило. Это имя записывается в ключ «ID«. При автоматическом пересоздании файла правил urlrewrite.php с помощью средств административной части сайта пересоздаются только правила, у которых заполнен ключ «ID«. Эти правила пересоздаются на основании анализа физических файлов в папке сайта. Правила с пустым ключом «ID» при автоматическом пересоздании файла правил не изменяются.

Подключение системы обработки адресов

Перед началом использования система обработки адресов должна быть подключена на сайте. Для этого необходимо:

Примеры правил и условий для модуля mod_rewrite

Поддержка компонентов 2.0

При добавлении на страницу компонента с поддержкой ЧПУ («человеко-понятный URL«) (если файл сохраняется с помощью API), автоматически создаётся правило обработки адреса. Если страница создаётся не с помощью API, а, например, записывается через FTP, то необходимо выполнить пересоздание правил (кнопка на панели инструментов на странице настройки правил обработки адресов).

Поддержка ЧПУ включается в компоненте с помощью предопределённого входного параметра SEF_MODE. При этом в предопределённом входном параметре SEF_FOLDER устанавливается папка, в которой работает компонент. Папка может быть виртуальной (т.е. физически может не существовать). При сохранении страницы с размещённым на ней компонентом, переключенным в режим ЧПУ (параметр SEF_MODE равен Y), через стандартный интерфейс правило обработки адресов создаётся следующим образом: в ключ условия применения шаблона («CONDITION«) записывается регулярное выражение, полученое из папки в параметре SEF_FOLDER, в ключ «ID» записывается имя компонента, в ключ пути («PATH«) записывается физический адрес страницы.

Например, пусть компонент «bitrix:catalog» размещён на странице /fld/c.php и его подключение выглядит следующим образом:

Тогда при сохранении страницы /fld/c.php в системе обработки адресов добавится запись:

Таким образом, при запросе адресов, начинающихся со строки /mycatalog/, будет подключаться скрипт /fld/c.php. В этом скрипте запрошенный адрес может быть проанализирован и выполнены требуемые действия.

Смотрите также

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

какое правило необходимо задать в файле urlrewrite php системы

Цитата
Борис Байзулаев пишет:
Адрес физического файла, подключенного в результате обработки адреса записывается в
Код
$_SERVER[«REAL_FILE_PATH»]

какое правило необходимо задать в файле urlrewrite php системы

какое правило необходимо задать в файле urlrewrite php системы

какое правило необходимо задать в файле urlrewrite php системы

какое правило необходимо задать в файле urlrewrite php системы

какое правило необходимо задать в файле urlrewrite php системы

какое правило необходимо задать в файле urlrewrite php системы

Упрощенный вариант правила, решающий проблему, описанную Денисом Мальцевым в предыдущем комментарии.

какое правило необходимо задать в файле urlrewrite php системы

Одна интересная особенность, которую надо учитывать.

Допустим вам надо сделать преобразование такого вида, чтобы при открытии страницы /news/445.php происходило преобразование в /news/detail.php?ID=445
Можно использовать такое правило

Оно даже будет работать, но ровно до тех пор пока в строке не появятся дополнительные параметры. Например пользователь перешел с внешнего ресурса и в URL была добавлена метка для Google Analitics, запрошенный URL получился примерно такой /news/445.php?utm_source=google. Вместо текста новости вы увидите сообщение «Элемент не найден», потому что в результате преобразования получился такой адрес /news/detail.php?ID=445?utm_source=google.

Ниже приведен код, решающий эту проблему:

какое правило необходимо задать в файле urlrewrite php системы

Задача : Выполнить 301 редирект с одного домена на другой, чтобы любой адрес домена olddomain вёл на тот же адрес, но в домене newdomain.

Источник

Bitrix — UrlRewrite (feat. Juggernaut)

какое правило необходимо задать в файле urlrewrite php системы

Продолжаем лупить статьи на тему «Битрикс не так уж и плох, если его доработать».
На этот раз разговор пойдет на тему «url_rewrite», потому как я считаю, что текущий вариант вообще не идеален.
А идеальным я считаю вариант маршрутизации в микрофреймворках, например Slim (или тот же Lumen), вообщем тех, которые дружат с PSR-7.
Кому интересно, го под кат.
Кому не интересно, ну тут уж сами решайте 😉

INTRO

На самом деле мои предыдущие статьи носили более менее абстрактный характер (ну кроме статьи про Juggernaut пожалуй), поэтому в данном посте постараюсь меньше писать теории и побольше кода.

Кстати про Juggernaut

Но это как говорить «совсем другая история», поэтому вернемся к тому, о чем собственно данная статья: роутинг.

UrlRewrite by Bitrix

Порядок маршрутизации я думаю лучше изобразить схемкой (и понятно, и наглядно):

какое правило необходимо задать в файле urlrewrite php системы

Что это все значит:

include bitrix/urlRewrite.php
Подключаем файл который занимается маршрутизацией (ну это я думаю и так все поняли).
Вообще данный пункт (и все что выше на блок схеме) — это заслуги .htaccess:

fix request_uri for IIS
Данный пункт, судя по комменту в коде, ответственен за какие то косяки IIS (бедняга MS), за какие я не в курсе, но логика следующая:
если QUERY_STRING имеет вид «wtf=404;http(s)://wtf.ru», то все GET параметры запроса чистятся и данная конструкция убирается из адреса.
На вопрос «что проиходит?» я не могу дать ответа, так что едем дальше.

include dbconn.php
Подключаем базу.
Зачем? Непонятно, т. к. запросов к базе дальше нет и работа идет только с файловой системой.
Я конечно не опускался в реализацию классов для работы с файлами, но если им нужно что-либо от базы, то это не иначе как печально 🙁

decode request page (for UTF-8)
Все понятно из названия, кодирование REQUEST_URI.
Зачем? Зачем Битрикс любит Windows-1251? Без понятия. Но это будет продолжаться вечно (и это инсайдерская информация).

include /urlRewrite.php
Собственно подключаем сами правила маршрутизации.

Много неясностей, зачем сделано так, а не иначе?
Ну и много неясностей, зачем вообще это сделано?
Так что теперь перейдем к идеальному варианту Slim’a.

UrlRewrite by Slim

Как делает этот замечательный фреймворк:

Легко и непринужденно цепляемся к нужному действию, с нужным маршрутом, параметрами и реализацией.

UrlRewrite by Juhhernaut

Ну, а теперь пробуем все это миксануть.
Выкидываем из Slim’a указание метода и собственно реализацию действия, вместо нее будет путь до файла.
Для начала обозначим синтаксис привязки маршрутов к реальным физически файлам (по факту это является мануалом использования):

По факту, если реализацию маршрутов оставить на совести компонентов, то достаточно будет прописать следующую конструкцию (да, так тоже можно 😉 ):

И собственно все. Простой и понятный роутинг у вас в кармане.

Источник

urlrewrite. Написать правило для перенаправления на элемент bitrix.catalog

Как при помощи urlrewrite.php выполнить перенаправление на виртуальную страницу? Например на страницу элемента каталога (bitrix.catalog)?

Записываю следующее правило:

array(
«CONDITION» => «#^/catalog/#»,
«RULE» => «»,
«ID» => «»,
«PATH» => «/catalog/catalog_element_code»,
)

и перенаправления не происходит.

Подскажите пожалуйста, что не так?

Цитата
Поясните, по какому адресу и что должно выводиться/открываться.

Есть некоторый каталог (созданный при помощи комплексного компонента bitrix.catalog), есть инфоблок, связанный с этим каталогом.

Настройки инфоблока:
URL страницы раздела: #SITE_DIR#/catalog/#SECTION_CODE_PATH#/
URL страницы детального просмотра: #SITE_DIR#/catalog/#ELEMENT_CODE#

Настройки компонента bitrix.catalog:
Управление адресами страниц > Раздел: #SECTION_CODE_PATH#/
Управление адресами страниц > Детальная информация: #ELEMENT_CODE#

Необходимо при помощи urlrewrite делать перенаправление на URL определённой секции или элемента.

Подобная проблема, которую не могу решить.

в корне сайта есть bitrix:catalog с параметрами:
«SEF_URL_TEMPLATES» => array(
«sections» => «»,
«section» => «#SECTION_CODE_PATH#»,
«element» => «#SECTION_CODE_PATH#/#ELEMENT_CODE#»,
«compare» => «compare.php?action=#ACTION_CODE#»,
),

в urlrewrite есть следующие правила:
array(
«CONDITION» => «#^/(.*)/brand/([a-zA-Z0-9\\-_]+)/\$#»,
«RULE» => «SECTION_CODE_PATH=\$1&BRAND=\$2»,
«ID» => «»,
«PATH» => «/index.php»,
),
array(
«CONDITION» => «#^/(.*)#»,
«RULE» => «»,
«ID» => «bitrix:catalog»,
«PATH» => «/index.php»,
),

пример:
1) сайт/категория1/категория2
2) сайт/категория1/категория2/brand/test/

Почему на эти запросы показываются разные элементы инфоблока, вернее для второго случая «Раздел не найден»? ($_REQUEST[«BRAND»] никак не обрабатываю)

Собственно, я не уверен что bitrix:catalog опирается именно на SECTION_CODE_PATH при формировании результата. (пробовал SECTION_CODE_PATH,
SECTION_CODE, CODE)

Источник

Список правил обработки адресов

Управление правилами преобразования адресов производится на странице Обработка адресов (Настройки > Настройки продукта > Обработка адресов).

Обработка адресов (UrlRewrite) применяется для того, чтобы скрипт мог отвечать не только по своему физическому, но и по любому другому указанному адресу. Например, можно задать такие настройки обработки адресов, что скрипт, лежащий в файле /fld/c.php и отвечающий по адресу /fld/c.php?id=15 будет отвечать также по адресу /catalog/15.php.

Адрес, по которому будет отвечать скрипт, не должен физически существовать на сервере. Если такой адрес физически существует, то будет вызван скрипт по этому адресу. Система обработки адресов запущена в этом случае не будет.

Фильтр

Форма фильтра используется для выбора из списка правил обработки в соответствии с указанными условиями. Нижеследующая таблица описывает параметры, по которым может выполняться поиск.

ПолеОписание
ПутьПоиск правила по пути к файлу.
СайтПоиск правил для указанного сайта.
УсловиеПоиск правил обработки адресов по условию применения.
КомпонентПоиск правил по полному имени компонента (пространство_имен:имя_компонента).

Для того чтобы отобрать правила по заданным критериям поиска, нажмите кнопку Найти. Для отображения всех правил нажмите кнопку Отменить.

Контекстная панель

КнопкаОписание
Новая записьПереход к форме создания нового правила обработки адресов.
ПересозданиеПереход к странице Пересоздание правил обработки адресов.
НастроитьПереход к диалогу настройки внешнего вида отчетной формы.
ExcelЭкспорт данных из отображаемой таблицы в формат MS Excel.

Список правил

Смотрите также

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Источник

Обработка адресов

Понятие обработки адресов

Обработка адресов (UrlRewrite) применяется для того, чтобы скрипт мог отвечать не только по своему физическому, но и по любому другому указаному адресу. Например, можно задать настройки обработки адресов, чтобы скрипт в файле /fld/c.php, отвечающий по адресу

отвечал также по адресу

Адрес, по которому будет отвечать скрипт, не должен физически существовать на сервере. Если такой адрес физически существует, то будет вызван скрипт по этому адресу. Система обработки адресов запущена в этом случае не будет.

Правила обработки

Правила обработки адресов настраиваются отдельно для каждого сайта и хранятся в корне сайта в файле urlrewrite.php. Файл содержит массив $arUrlRewrite, каждая запись которого является правилом обработки адреса. Файл urlrewrite.php имеет следующий вид:

Каждое правило должно содержать уникальное в рамках сайта условие выполнения правила. Условие выполнения записывается в ключ «CONDITION» массива и является шаблоном Perl-совместимого регулярного выражения. Например, условие:

указывает, что данное правило должно применяться для всех адресов, которые начинаются с подстрок вида:

Правило может содержать адрес физически существующего скрипта, который будет подключен при выполнении условия. Этот адрес записывается в ключ «PATH«. Например, если в системе обработки адресов зарегистрировано правило:

и пользователь запросил страницу:

которая физически не существует, то система обработки адресов подключит скрипт:

Правило может содержать правило замены, которое записывается в ключ «RULE«. Если правило замены установлено, то адрес реально существующего подключаемого скрипта формируется заменой регулярным варажением условия выполнения (шаблона выражения) на конкатенацию физического пути (ключ «PATH«) и правила замены (ключ «RULE«). Например, если в системе обработки адресов зарегистрировано правило:

и пользователем запрошена страница:

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

и будет подключен скрипт:

Если в системе обработки адресов зарегистрировано правило:

и пользователем запрошена страница:

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

и будет подключен скрипт:

Правило может содержать имя компонента, который создал это правило. Это имя записывается в ключ «ID«. При автоматическом пересоздании файла правил urlrewrite.php с помощью средств административной части сайта пересоздаются только правила, у которых заполнен ключ «ID«. Эти правила пересоздаются на основании анализа физических файлов в папке сайта. Правила с пустым ключом «ID» при автоматическом пересоздании файла правил не изменяются.

Подключение системы обработки адресов

Перед началом использования система обработки адресов должна быть подключена на сайте. Для этого необходимо:

Примеры правил и условий для модуля mod_rewrite

Поддержка компонентов 2.0

При добавлении на страницу компонента с поддержкой ЧПУ («человеко-понятный URL«) (если файл сохраняется с помощью API), автоматически создаётся правило обработки адреса. Если страница создаётся не с помощью API, а, например, записывается через FTP, то необходимо выполнить пересоздание правил (кнопка на панели инструментов на странице настройки правил обработки адресов).

Поддержка ЧПУ включается в компоненте с помощью предопределённого входного параметра SEF_MODE. При этом в предопределённом входном параметре SEF_FOLDER устанавливается папка, в которой работает компонент. Папка может быть виртуальной (т.е. физически может не существовать). При сохранении страницы с размещённым на ней компонентом, переключенным в режим ЧПУ (параметр SEF_MODE равен Y), через стандартный интерфейс правило обработки адресов создаётся следующим образом: в ключ условия применения шаблона («CONDITION«) записывается регулярное выражение, полученое из папки в параметре SEF_FOLDER, в ключ «ID» записывается имя компонента, в ключ пути («PATH«) записывается физический адрес страницы.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *