Редирект bitrix urlrewrite php

Форум

Всем доброго времени суток. Ситтуация следующая: есть urlrewrite с site.com на www.site.com . Также настроен ЧПУ. При переходе на страницу с чпу вида http://site.com/news/1/10/ происходит редирект на страницу с urlrewrite и отдается 404. Подскажите, в чем может быть проблема?

Options -Indexes ErrorDocument 404 /404.php #php_flag allow_call_time_pass_reference 1 #php_flag session.use_trans_sid off #php_value display_errors 1 #php_value mbstring.func_overload 2 #php_value mbstring.internal_encoding UTF-8 Options +FollowSymLinks RewriteEngine On RewriteCond % !-f RewriteCond % !-l RewriteCond % !-d RewriteCond % !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] RewriteCond % ^site\.ru RewriteRule ^(.*)$ http://www.site.ru/$1 [R=permanent,L] AddType application/x-httpd-php .ico DirectoryIndex index.php index.html ExpiresActive on ExpiresByType image/jpeg "access plus 3 day" ExpiresByType image/gif "access plus 3 day" 
$arUrlRewrite = array( array( "CONDITION" => "#^/news/#", "RULE" => "", "ID" => "bitrix:news", "PATH" => "/news/index.php", ), );

При переходе на ссылку вида site.ru/news/ происходит нормальный переход с редиректом на www.site.ru/news/ но если перейти по site.ru/news/1/ то уже 404. Может, кто-нибудь может родсказать причину?

Компонент (и.с.) — существительное мужского рода (ГОСТ 34.003-90).

Да, не находит новости и их секции. При данном редиректе на www. А если убрать редирект на www — то всё нормально отрабатывает.

Компонент (и.с.) — существительное мужского рода (ГОСТ 34.003-90).

 Options +FollowSymLinks RewriteEngine On RewriteCond % !-f RewriteCond % !-l RewriteCond % !-d RewriteCond % !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] RewriteCond % ^site\.ru RewriteRule ^(.*)$ http://www.site.ru/$1 [R=permanent,L] 

После «RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]» url передается Битриксу, поэтому переадресацию надо переместить выше:

 Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteCond % ^site\.ru RewriteRule ^(.*)$ http://www.site.ru/$1 [R=permanent,L] RewriteCond % !-f RewriteCond % !-l RewriteCond % !-d RewriteCond % !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] 
#php_value display_errors 1
#php_value display_errors 0
#php_value display_errors 1
#php_value display_errors 0

Telegram / WhatsApp / Viber: +7 908 048 92 38

Центр поддержки

Продукты

Управление сайтом

Битрикс24

Интернет-магазин + CRM

Решения

Для интернет-магазинов

Каталог готовых решений

Внедрение

Выбрать партнера

Проверить партнера

Стать партнером

1С-Битрикс http://www.1c-bitrix.ru Общие вопросы info@1c-bitrix.ru Приобретение и лицензирование продуктов : sales@1c-bitrix.ru Маркетинг/мероприятия/PR marketing@1c-bitrix.ru Партнерская программа partners@1c-bitrix.ru Мы работаем с 10:00 до 19:00 по московскому времени. Офис в Москве 127287 Россия Московская область Москва 2-я Хуторская улица дом 38А строение 9 Офис в Калининграде +7 (4012) 51-05-64 Офис в Калининграде 236001 Россия Калининградская область Калининград Московский проспект 261 Офис в Киеве ukraine@1c-bitrix.ru Телефон в Киеве +3 (8044)221-55-33 Офис в Киеве 01033 Украина Калининградская область Киев улица Шота Руставели 39/41 офис 1507

Читайте также:  Java random integer with range

Контент для лиц от 16 лет и старше

© 2001-2023 «Битрикс», «1С-Битрикс». Работает на 1С-Битрикс: Управление сайтом. Политика конфиденциальности

Источник

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

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

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

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

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

 "#^/gallery/#", "RULE" => "", "ID" => "bitrix:photo", "PATH" => "/max/images/index.php", ), array( "CONDITION" => "#^/forum/#", "ID" => "bitrix:forum", "PATH" => "/forum/index.php", ), array( "CONDITION" => "#^/index/(7+)/(2+)/#", "RULE" => "mode=read&CID=$1&GID=$2", "ID" => "bitrix:catalog.section", "PATH" => "/newforum/index.php", ), array( "CONDITION" => "#(.+?)\\.html(.*)#", "RULE" => "$1.php$2", ), ); ?>

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

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

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

array( "CONDITION" => "#^/gallery/#", "PATH" => "/max/images/index.php", )

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

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

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

array( "CONDITION" => "#^/index/(8+)/(1+)/#", "RULE" => "mode=read&CID=$1&GID=$2", "PATH" => "/newforum/index.php", )

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

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

$url = preg_replace("#^/index/(8+)/(9+)/#", "/newforum/index.php?mode=read&CID=$1&GID=$2", "/index/5/48/");
/newforum/index.php?mode=read&CID=5&GID=48

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

array( "CONDITION" => "#(.+?)\\.html(.*)#", "RULE" => "$1.php$2", )

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

Читайте также:  Создать файл конфигурации python

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

$url = preg_replace("#(.+?)\\.html(.*)#", "$1.php$2", "/about/company.html?show");

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

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

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

    если у вас на веб-сервере настроена обработка ошибки 404 (например, для Apache установлена директива ErrorDocument 404 /404.php ), то вы должны изменить файл /404.php, вставив в самое начало файла команду:

include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');
 RewriteEngine On RewriteCond % !-f RewriteCond % !-l RewriteCond % !-d RewriteCond % !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] 
RewriteCond % !-f RewriteCond % !\..$ RewriteCond % !(.*)/$ RewriteRule ^(.*)$ http://[имя_вашего_сайта]/$1/ [L,R=301]
RewriteCond % ^[A-Z]\ /index\.php\ HTTP/ RewriteRule ^(.*)index\.php$ http://[имя_вашего_сайта]/$1 [R=301,L]

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

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

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

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

$APPLICATION->IncludeComponent( "bitrix:catalog", "", Array( "SEF_MODE" => "Y", "SEF_FOLDER" => "/mycatalog/", "IBLOCK_TYPE_ID" => "catalog", "BASKET_PAGE_TEMPLATE" => "/personal/basket.php", ) );

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

array( "CONDITION" => "#^/mycatalog/#", "RULE" => "", "ID" => "bitrix:catalog", "PATH" => "/fld/c.php", )

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

Читайте также:  Плавное появление элементов

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

  • ЧПУ в курсе Администратор Базовый.
  • Настройка ЧПУ в курсе Разработчик Bitrix Framework.
  • Работа комплексного компонента в SEF режиме в курсе Разработчик Bitrix Framework.

Источник

Форум

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

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

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

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

Если в PATH прописать реально существующий физический файл — всё работает, а с путями к секциям и элементам каталога (то есть с виртуальными страницами) — не работает.

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

array( "CONDITION" => "#^/catalog/([\w-_]+)/.*#", "RULE" => "CODE=$1", "ID" => "", "PATH" => "/catalog/section.php", )

Здесь
/catalog/section.php — реально существующая страница с вашим компонентом, например, «Элементы раздела»
В $_REQUEST[«CODE»] вы получите символьный код раздела, который нужно будет указать в параметрах компонента со страницы описанной выше

Олег Постоев , спасибо, так наверное и сделаю.
Но всё-таки интересно, есть ли способ штатными средствами перенаправить на виртуальную страницу?

Олег Постоев , не получается перенаправить как на /catalog/section.php так и на /catalog/element.php. Посмотрел по ftp в папку catalog, там нет таких файлов. То есть они тоже виртуальные. Так что проблема по-прежнему актуальна.

Эти файлы надо создать и разместить в них свои компоненты.
Хотя закрадывается сомнение — правильно ли я понял вашу задачу. Поясните, по какому адресу и что должно выводиться/открываться.

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

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

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

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

Проблема в том, что в виде, как я написал перенаправление не работает — наверное из-за того, что реально не существует файла element_code и папок section1_code, section11_code/section111_code/ :

array("CONDITION" => ". ", //Какой-либо URL "RULE" => "", "ID" => "", "PATH" => "http://mysite/catalog/section1_code/section11_code/section111_code/ " )
array("CONDITION" => ". ", //Какой-либо URL "RULE" => "", "ID" => "", "PATH" => "http://mysite/catalog/element_code " )

может быть существует способ обойти это ограничение, или заставить urlrewrite перенаправлять на виртуальные (не существующие физически) страницы?

Источник

Оцените статью