Битрикс, ЧПУ и редиректы -

ЧПУ в сайтах на на Bitrix включается относительно несложно.
Для каталога (в настройках компонента) - указываем #SECTION_CODE#/#ELEMENT_CODE#/ (см документацию).


...
"SEF_URL_TEMPLATES" => array(
"sections" => "",
"section" => "#SECTION_CODE#/",
"element" => "#SECTION_CODE#/#ELEMENT_CODE#/",
"compare" => "compare.php?action=#ACTION_CODE#",
),
...

https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php

Однако, после такой операции “слетят” старые адреса.. Более того, элементы будут доступны по нескольким URL-ам. (при смене ID/ категории в адресе, страница элемента будет отображаться):
/catalog/category-1/product-1-code/
/catalog/category-blablabla/product-1-code/


$arResult["ELEMENT_ID"] = CIBlockFindTools::GetElementID(
$arResult["VARIABLES"]["ELEMENT_ID"],
$arResult["VARIABLES"]["ELEMENT_CODE"],
false,
false,
array(
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"IBLOCK_LID" => SITE_ID,
"IBLOCK_ACTIVE" => "Y",
"ACTIVE_DATE" => "Y",
"ACTIVE" => "Y",
"CHECK_PERMISSIONS" => "Y",
)
);

аналогично
$arResult["SECTION_ID"] = CIBlockFindTools::GetSectionID(
$arResult["VARIABLES"]["SECTION_ID"],
$arResult["VARIABLES"]["SECTION_CODE"],
array("IBLOCK_ID" => $arParams["IBLOCK_ID"])
);

Сделал, судя по описанию, очень похожим методом:

Решал похожую задачу около года назад: нужно было избавиться от дублей страниц, т.к. от замены кода раздела в URL карточка товара не меняется :)
Сделал очень просто: в component_epilog.php компонента bitrix:catalog.element добавил проверку: получение “настоящего” URL по ID товара, и его сравнение с текущим URL. Если не совпадает - то делаем 301 редирект на “настоящий” URL

$urls = explode ('/',$_SERVER['REQUEST_URI']);
if (isset($urls[3]) && is_numeric($urls[3])) {
if ($rs = CIBlockElement::GetList (Array(), Array("ID"=>$urls[3]), false, false, array('DETAIL_PAGE_URL'))) {
if($ar = $rs->GetNext()) {
if ($ar['DETAIL_PAGE_URL'] != $_SERVER['REQUEST_URI'])
LocalRedirect($ar['DETAIL_PAGE_URL'], false, 301);
}
}
} else if (isset ($urls[2]) && is_numeric($urls[2])) {
if ($rs = CIBlockSection::GetByID ($urls[2])) {
if($ar = $rs->GetNext()) {
if ($ar['SECTION_PAGE_URL'] != $_SERVER['REQUEST_URI'])
LocalRedirect($ar['SECTION_PAGE_URL'], false, 301);
}
}
}

Метки:

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

1 комментарий к записи “Битрикс, ЧПУ и редиректы -”

  1. Scottforne сообщает :

    Всем привет, уже третий день не могу поставить DirectX - пробовал установить DLL тдельно, но не помогает, пишет что у меня 32-х битная система. Что делать?

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