Грубо говоря, всё действительно сводится к парсингу $_SERVER['REQUEST_URI'], равно как и $APPLICATION->GetCurPage(). Если хотите воспользоваться "встроенными" стандартными средствами для ЧПУ - вот участок кода, отвечающий за эту задачу. В $arVariables попадают параметры, описанные в $arComponentVariables (по шаблонам путей из <сайт>/urlrewrite.php
$arResult["URL_TEMPLATES"] = array();
$arDefaultUrlTemplates404 = array("element_list" => "","element_history" => "#ELEMENT_ID#/history/","element_edit" => "#ELEMENT_ID#/",);$arDefaultVariableAliases404 = Array("element_list" => array("PAGE_NAME" => "PAGE_NAME"),"element_edit" => array("PAGE_NAME" => "PAGE_NAME", "ELEMENT_ID"=>"ELEMENT_ID"),"element_history" => array("PAGE_NAME" => "PAGE_NAME", "ELEMENT_ID"=>"ELEMENT_ID"),);$arComponentVariables = Array("ELEMENT_ID", "PAGE_NAME");$arDefaultVariableAliases = Array("ELEMENT_ID" => "ELEMENT_ID", "PAGE_NAME"=> "PAGE_NAME");$requestURL = $sPath = $prevComponentPage = false;$arUrlTemplates = CComponentEngine::MakeComponentUrlTemplates($arDefaultUrlTemplates404, $arParams["SEF_URL_TEMPLATES"]);$arVariableAliases = CComponentEngine::MakeComponentVariableAliases($arDefaultVariableAliases404, $arParams["VARIABLE_ALIASES"]);$componentPage = CComponentEngine::ParseComponentPath($arParams["SEF_FOLDER"],$arUrlTemplates,$arVariables,$requestURL);if (empty($componentPage) && !empty($_REQUEST["PAGE_NAME"])):$componentPage = $_REQUEST["PAGE_NAME"];endif;$componentPage = (empty($componentPage) ? "element_list" : $componentPage);CComponentEngine::InitComponentVariables($componentPage, $arComponentVariables, $arVariableAliases, $arVariables);