Правила обработки адресов в bitrix
Грызем ЧПУ «Битрикс»: укус первый
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Если послушать рядовых пользователей, то ЧПУ «Битрикс» непостижим, чужд и враждебен, как космос. Штука и впрямь непростая, даже сами разработчики CMS это признают. Но на следующем же абзаце они утверждают, что ЧПУ прекрасно работает, надо мол просто знать что, где и как подкрутить. Золотой совет! Вот давайте прямо сейчас и начнем разбираться.
Почему не работает правило обработки адресов?
1. Прежде всего проверьте, все ли значения правила записаны, например:
array(
«CONDITION» => «#^/index/([0-9]+)/([0-9]+)/#»,
«RULE» => «mode=read&CID=$1&GID=$2»,
«ID» => «bitrix:catalog.section»,
«PATH» => «/newforum/index.php»,
),
Здесь CONDITION – условие, RULE – правило, ID – компонент, PATH – путь до компонента
2. Затем проверьте, верно ли записаны правила.
Ищите ошибки в путях, синтаксические ошибки, неверно записанные условия и правила. Документацию и примеры смотрите по адресу
3. Далее проверьте очередность правил сверху вниз кода файла urlrewrite.php
Частное и реже используемое правило следует размещать выше, чем более общее и чаще используемое. Например, правило обработки адреса статьи раздела должно быть выше правила обработки адреса раздела, к которому относится статья. Устанавливайте правила через интерфейс административной панели Настройки > Настройки продукта > Обработка адресов, контролируйте правильность в файле urlrewrite.php
4. Проверьте настройки компонента и инфоблока.
А) Доступ к инфоблоку и к компоненту открыт?
Б) Права доступа к инфоблоку и к компоненту достаточны (чтение)?
В) Элемент существует?
Г) Номер элемента указан верно?
5. Не меняла ли CMS записи в файле urlrewrite.php?
При сохранении настроек комплексного компонента «Битрикс» обновляет правила и файл urlrewrite.php, в процессе выполняя сортировку правил. В результате сплошь и рядом нарушается порядок очередности и правила перестают работать.
Всегда имейте наготове резервную копию актуальной версии файла urlrewrite.php с верно записанными правилами. Выработайте автоматизм, как на Ctrl+S. Загрузить такой бэкап двухминутное дело, а восстанавливать правила по памяти куда как дольше.
Особо продвинутые программисты, впрочем, дают разные рекомендации по радикальному избавлению от этой напасти. Мы пока таких советов давать не готовы, сначала изучим вопрос и вернемся к нему в следующем разговоре про ЧПУ «Битрикс».
www.acrit-studio.ru
Администратор. Базовый
откликалась на адрес вида:
Создайте правило с параметрами:
Например, для ЧПУ-пути /some_sef_folder/section_code/ , где section_code — символьный код секции. ЧПУ-правило будет:
В скрипте /real_script_path/index.php в настройках компонента параметру символьного кода секции нужно указывать $_REQUEST[‘SECTION_CODE’]
Для ЧПУ-пути /some_sef_folder/section_code/element_id.php , где section_code — символьный код секции, а element_id — целочисленный код элемента. ЧПУ-правило будет:
В скрипте /real_script_path/index.php компоненту нужно передавать $_REQUEST[‘SECTION_CODE’] и $_REQUEST[‘ELEMENT_ID’] соответственно.
some_sef_folder — ЧПУ-путь, может не существовать реально на сервере.
real_script_path — путь к реальному скрипту-обработичку на сайте, который будет генерировать результат.
- Один из разделов каталога ( site.ru/каталог/название_раздела1/ ) выводить по адресу site.ru/другое_название_раздела1/
- Одну из статей ( site.ru/статьи/название_статьи1/ ) выводить по адресу site.ru/другое_название_статьи1/
- Один из подразделов ( site/раздел/подраздел/ ) выводить по адресу site.ru/новое_название/
- Одну из статей ( site.ru/раздел/статьи/название_статьи2/ ) выводить по адресу site.ru/другое_название_статьи2/
Пример приведёт для первого случая, остальные варианты аналогичны.
Пути вида: http://site.com/код раздела_код подраздела не обрабатываются этим правилом.
Причина: знак минус в выражении [^-] воспринимается как служебный, обозначающий диапазон, а служебные символы нужно предварять знаком «\» , т.е. писать вместо минуса «\-» . Однако этого недостаточно если код подраздела состоит не только из символов, например: «1-xxxx», «2-xxxx».
Причина в первом квантификаторе в первых круглых скобках, действие которого нужно ограничить знаком «?». Конечное условие: #^/(R.*?)\-(.*)/#
для site.ru/cat/razdel/element/ откроет тоже самое, что и для site.ru/cat/razdel/
Лучше сделать два правила. (Использование двух правил допускается системой).
1) Создайте файл /catalog/list.php следующего вида:
2) Добавьте правило в /urlrewrite.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/38.php , которая физически не существует, то система обработки адресов подключит скрипт /max/images/index.php .
и пользователем запрошена страница /index/5/48/ , то будет подключен скрипт /newforum/index.php?mode=read&CID=5&GID=48.
- Условие: #(.+?)\\.html(.*)#
- Файл:
- Правило: $1.php$2
Настройка ЧПУ, правило обработки адресов
Подскажите, что не так записано в поле Условие или Файл
А обратную задачу как решить, подскажете?
/index.php?option=com_virtuemart&page=shop.browse&category_id=350& и далее разные параметры.
(обращения роботов по адресам от старой версии сайта )
редирект на /old/350/index.php
Условие: #^/index.php?option=com_virtuemart&page=shop.browse&category_id=([0-9]+)#
Компонент:
Файл: /old/
Правило: $1/index.php
не работает
Что-то не нравятся мне вложенные скобки и двойной слеш в примере, пожалуй, переделаю по-другому
Условие: #^/gospel/pericope/([0-9]+)/([0-9]+)/(\\?(.*))?#
Так, наверное, лучше будет:
#^/gospel/pericope/([0-9]+)/([0-9]+)/\?(.*)?#
Алексей, для такого правила вам не нужно ничего добавлять, все параметры и так придут.
Т.е.: #^/gospel/pericope/([0-9]+)/([0-9]+)/#
вполне достаточно
А вот если у вас ссылка такого шаблона /gospel/pericope/([0-9]+)/([0-9]+).php
тогда вот такое правило должно быть:
#^/gospel/pericope/([0-9]+)/([0-9]+)\.php.*#
Или я не совсем понял вашу проблему?
Я так понимаю, что им неоткуда прийти, если они не выделены в скобках и не пристыкованы через $3.
Если я оставляю правило так: #^/gospel/pericope/([0-9]+)/([0-9]+)/#, а потом администратором зайду на страницу /gospel/pericope/545/208/, мне будет показана страница /gospel/pericope/?ELEMENT_ID=545&SECTION_ID=208, т.к. правило сработает.
Но, если я, например, что-нибудь исправлю на странице и нажму кнопку Обновить кеш, то браузер отправит страницу с параметром /gospel/pericope/545/208/?clear_cache=Y, что вызывает ошибку (не найден раздел), я подозреваю, что из-за того, что ?clear_cache=Y теряется при формировании /gospel/pericope/?ELEMENT_ID=545&SECTION_ID=208&clear_cache=Y.
Поэтому, я добавил последнюю третью скобку, чтобы все изначальные параметры не терять, а пристыковать в конце к ELEMENT_ID=545&SECTION_ID=208.
Почему? Апач увидит тот REQUEST_URI, который его запросили и разберет его, он ничего не знает про ваше ЧПУ. Затем система urlrewrite битрикса разберет ваше правило, добавит в суперглобальные переменные ЧПУ-параметры и подправит $_SERVER[‘QUERY_STRING’].
Для проверки на вашей ЧПУ-странице с обычным правилом сделайте echo ‘ ‘;
добавляйте какие хотите дополнительные параметры — они все будут.
P.S. А ошибку вызывает что-то другое.
Ошибка, вроде ушла, когда я второй подряд ? добавил, т.е. сделалал первый ? необязательным, пока так оставляю:
#^/gospel/pericope/([0-9]+)/([0-9]+)/\??(.*)?#
Array ( [0] => Array (
[clear_cache] => Y
[ELEMENT_ID] => 493
[SECTION_ID] => 141?clear_cache=Y )
[1] => Array (
[REDIRECT_QUERY_STRING] => clear_cache=Y
[REDIRECT_STATUS] => 200
[QUERY_STRING] => ELEMENT_ID=493&SECTION_ID=141?clear_cache=Y
[REQUEST_URI] => /gospel/synopsis/infogram/493/141/?clear_cache=Y
[SCRIPT_NAME] => /bitrix/urlrewrite.php
[PHP_SELF] => /bitrix/urlrewrite.php
[argv] => Array ([0] => clear_cache=Y)
[argc] => 1
[REAL_FILE_PATH] => /gospel/synopsis/infogram/index.php))
Значит нет необходимости или еще очередь не дошла
Вы вручную хотите ЧПУ-правила добавить?
Тогда так.
Например, для ЧПУ-пути «/some_sef_folder/section_code/»,
где section_code — символьный код секции.
ЧПУ-правило будет:
Условие: #^/some_sef_folder/([0-9a-zA-Z_-]+)/.*#
Правило: SECTION_CODE=$1
Компонент:
Файл: /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 — целочисленный код элемента.
ЧПУ-правило будет:
Условие: #^/some_sef_folder/([0-9a-zA-Z_-]+)/([0-9]+)\.php.*#
Правило: SECTION_CODE=$1&ELEMENT_ID=$2
Компонент:
Файл: /real_script_path/index.php
— в скрипте /real_script_path/index.php компоненту нужно передавать $_REQUEST[‘SECTION_CODE’] и $_REQUEST[‘ELEMENT_ID’] соответственно.
some_sef_folder — ЧПУ-путь, может не существовать реально на сервере.
real_script_path — путь к реальному скрипту-обработичку на сайте, который будет генерировать результат.
dev.1c-bitrix.ru
Битрикс.Правило обработки адресов?
В Битриксе (пойдёт через апач и /urlrewrite.php):
Административный раздел / Настройка / Настройки продукта / Обработка адресов / Правила обработки:
Пример конфига ЧПУ через nginx:
То есть вам прямо на бэкэнд будет приходить ваша ссылка
www.site.ru/catalog/?brand=alcatel
=)
Именно благодаря введённому правилу урл
www.site.ru/catalog/alcatel
. обрабатывается как
www.site.ru/catalog/?brand=alcatel
. о чём свидетельствует переменная brand в массиве $_REQUEST:
Array ( [brand] => alcatel )
Он и не должен перенаправлять. Мы настроили ЧПУ.
toster.ru
Правила обработки адресов в bitrix
Компания «Виталфарм» вышла на рынок автомобильных аксессуаров в 1999 году. Одно из направлений деятельности компании — производство товаров, которые помогают автолюбителям создать комфортную и безопасную атмосферу в своем автомобиле. Компания «Виталфарм» предлагает большой ассортимент автоаксессуаров, необходимых каждому автомобилисту, и, кроме того, различные сопутствующие товары. Это приятные дополнения к жизни водителя, обеспечивающие удобство участникам движения, чистоту и красоту автомобиля.
Огромной популярностью у наших клиентов пользуются наборы автомобилиста. В каждый автонабор входит все необходимое для прохождения государственного техосмотра. Кроме того, дополнительные комплектующие набора автомобилиста могут помочь в непредвиденных ситуациях на дороге; любому водителю могут понадобиться те автоаксессуары, которые входят в состав автонабора.
Главная составляющая любого набора автомобилиста — авто аптечка, значение которой сложно переоценить. Непредвиденные ситуации возникают спонтанно, и водителю автомобиля, как и его пассажирам, аптечка может понадобиться в любой момент. Автомобильные аптечки первой помощи производства компании «Виталфарм» соответствуют законодательству Российской Федерации. Состав аптечки первой помощи (автомобильный) регламентирует Приказ МЗ и Медпром РФ № 325 от 20.08.1996 и Приказ МЗ РФ № 697 н от 08.09.2009. Согласно этим документам, с 1 июля 2010 года из состава автомобильной аптечки полностью исключены медикаменты, и оставлены только перевязочные (бинты, перевязочный пакет) и кровоостанавливающие (жгут, салфетки) средства. Кроме того, в аптечке есть лейкопластыри, медицинские перчатки для обработки грязных ран и устройство для реанимации — УДР или устройство для проведения искусственного дыхания «Рот-устройство-Рот». Каждому автомобилисту необходимо помнить, что поездка без аптечки может закончиться большими неприятностями для здоровья, которых можно избежать, вовремя и грамотно воспользовавшись стандартным набором первой медицинской помощи.
Во время поездки с авто может случиться какая-либо техническая неисправность — от этого не застрахованы даже новые или только что прошедшие полный комплекс техобслуживания автомобили. В наборах автомобилиста производства компании «Виталфарм» есть те необходимые автоаксессуары, которые пригодятся при аварии. Например, знак аварийной остановки и надежный буксировочный трос, незаменимый при серьезной поломке автомобиля.
При проблемах с аккумуляторной батареей незаменимы провода для прикуривания — благодаря этому изделию аккумулятор оперативно подзаряжается и готов к работе. Качественные стартовые провода прикуривателя будут служить много лет. Автомобильные наборы производства компании «Виталфарм» комплектуются стартовыми проводами (проводами-прикуривателями) российского производства с медной токопроводящей жилой, что особенно важно в условиях российской зимы.
Самостоятельное устранение неисправностей, особенно в темное время суток, сопряжено с риском быть незамеченным другими участниками движения. В такой ситуации необходимо всегда надевать аварийный жилет со светоотражающими элементами, также входящий в автонабор.
В случае возникновения возгорания в автомобиле поможет имеющийся в комплекте надежный огнетушитель (2 литра). Напоминаем, что Правила Дорожного Движения запрещают эксплуатацию авто, если в нем отсутствует огнетушитель.
В автомобильные наборы по желанию клиента могут входить и другие автоаксессуары. Среди них плащ-дождевик, необходимый в непогоду, плед на заднее сиденье автомобиля из водонепроницаемых материалов, защищающий обивку сидений от преждевременного износа и грязи. Еще одно актуальное для автомобилистов изделие — сетки в багажник. Благодаря сеткам в салоне автомобиля больше не будет лишних предметов, в багажнике всегда будет идеальный порядок, а перевозка хрупких предметов значительно упростится.
С автомобильными аксессуарами от компании «Виталфарм» прохождение ГосТехосмотра, оказание первой медицинской помощи и уход за автомобилем станут более простыми и комфортными.
Витал-фарм — аксессуары первой помощи и ухода за больными
На российском рынке изделий медицинского назначения компания «Виталфарм» прежде всего известна как один из крупнейших производителей аптечек первой медицинской помощи. Это, в первую очередь, автомобильные аптечки и аптечки матери и ребенка. Широкой линейкой представлены универсальные аптечки, для оказания первой доврачебной помощи в самых разных ситуациях; для промышленных предприятий и офисов выпускаются производственная и офисная аптечки.
Еще одно важное направление в работе компании — изготовление санитарно-гигиенических изделий из поливинилхлорида. Из этого материала изготавливаются самые разные по назначению изделия, и все они получаются долговечными и удобными в использовании. Первой в России компания «Виталфарм» стала выпускать медицинскую клеенку на ПВХ основе; наша клеенка имеет отличную теплопроводимость и износостойкость, и отличается мягкостью материала. Клеенка с ПВХ покрытием «Виталфарм» рекомендована к медицинскому применению и к применению в педиатрии. Другие изделия производства «Виталфарм» из поливинилхлорида — стаканчики для приема лекарств и спринцовки всех типоразмеров — необходимые предметы для личной гигиены, которые широко применяются в медучреждения и дома.
Витал-бэби — аксессуары для ухода за малышами
Еще одно ключевое направление деятельности компании — изделия, ориентированные на уход за ребенком в самом раннем возрасте. В первые годы жизни дети наиболее уязвимы, поэтому особенно важно использовать вещи исключительно безвредные и из экологичных материалов.
Помимо ярких и красивых нагрудничков, наматрасников, фартуков и прочих защитных изделий, необходимых малышу, компания «Виталфарм» предлагает натуральные многоразовые подгузники, защитные сетки от насекомых, которые сохранят ребенку спокойный сон, а также нарукавники — для тех, кто уже в раннем возрасте увлекся творческими занятиями. Линейка товаров для детей и мам производства компании «Виталфарм» постоянно расширяется, и мы рады постоянно предлагать нашим покупателям новинки!
Продукция компании «Виталфарм» завоевала заслуженную известность. С нами работают ведущие компании, лидеры в дистрибуции и продажах на фармацевтическом, автомобильном рынке и рынках потребительских товаров. Высочайший профессионализм наших сотрудников, индивидуальный подход к клиентам, ответственное отношение ко всем нюансам работы составляют основу нашей репутации.
vitalfarm.ru