[QUOTE]Lyubin.Evgeniy пишет:
Помогите, пожалуйста, с кодом, исключающим вариант ссылки без раздела ( /catalog/подраздел/элемент1/ ). Это хоть как-то частично решит проблему ЧПУ.
[/QUOTE]Выход прост, - не использовать SECTION_CODE_PATH пока разработчики не озаботятся наконец корректной SEO оптимизацией инфоблоков.
Кстати приведенное на хабре решение (по несуществующим секциям каталога) некорректно - оно выдает поисковым роботам статус 302 Found, а должно выдавать 404 Not Found.
Лучше использовать вот такой result_modifier.php
[CODE]<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?$rsSections = CIBlockElement::GetElementGroups($arResult['ID'], true);
while($arSection = $rsSections->Fetch())
$arSections[] = $arSection["CODE"];
if(!in_array($arParams['SECTION_CODE'], $arSections)){
CHTTP::SetStatus("404 Not Found");
@define("ERROR_404", "Y");
}?> [/CODE]А саму обработку 404 страницы загонять в init.php
[CODE]AddEventHandler('main','OnEpilog','_Check404Error', 1);
function _Check404Error()
{
if (defined('ERROR_404') && ERROR_404=='Y'&& !defined('ADMIN_SECTION'))
{
GLOBAL $APPLICATION;
$APPLICATION->RestartBuffer();
include $_SERVER['DOCUMENT_ROOT'].'/bitrix/templates/'.SITE_TEMPLATE_ID.'/header.php';
require ($_SERVER['DOCUMENT_ROOT'].'/404.php');
include $_SERVER['DOCUMENT_ROOT'].'/bitrix/templates/'.SITE_TEMPLATE_ID.'/footer.php';
}
} [/CODE]в этом случае без смены адреса и редиректов показывается содержимое вашей страницы ошибки.