Дата последнего изменения: 27.05.2021
Для хранения идентификаторов элементов/разделов информационных блоков удобнее всего использовать поле Символьный код. Например, в ссылке www.myserver.ru/catalog/mobile/nokia_3310/, mobile - это символьный код раздела Мобильные телефоны, а nokia_3310 - символьный код элемента, находящегося в разделе Мобильные телефоны. Символьный код должен быть уникальным и система сама проверяет уникальность.
В обработчике 404 ошибки необходимо "разобрать" переменную $_SERVER["REQUEST_URI"]
на нужные идентификаторы. Для этого в PHP есть ряд полезных функций:
Например, ссылки вида myserver.ru/users/<Логин пользователя> обрабатываются в файле 404.php так:
<? if(preg_match("~^/users/([a-z_][a-z0-9_]{2,14})/?$~i",$_SERVER["REQUEST_URI"],$match)) { header("HTTP/1.1 200 OK"); //делаем выборку по идентификатору require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $res = CUser::GetList($O, $B, Array("LOGIN_EQUAL_EXACT"=>$match[1],"ACTIVE"=>"Y")); //$match[1] содержит логин if($arUser = $res->GetNext()) { //выводим данные пользователя } else { //ошибка: нет такого пользователя } require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); } else { header("HTTP/1.1 404 Not Found"); //ошибка } ?>
Но жесткая проверка в preg_match не позволит сделать ссылки вида www.myserver.ru/users/user_login/?r1=banner&r2=computerra.ru, которые очень необходимы для анализа рекламных компаний. Поэтому, в начале файла 404.php пишем:
<?$arURI = parse_url($_SERVER["REQUEST_URI"]); $_SERVER["REQUEST_URI"] = $arURI["path"]; if(!empty($arURI["query"])) { parse_str($arURI["query"],$par); foreach($par as $key => $val) { global $$key; $$key = $val; } } ?>