Случается так, что urlrewrite отрабатывает некорректно. Хотелось бы иметь инструмент отладки, который показывает какое правило сработало и что подмешалось в REQUEST.
Чтобы каждый раз в таких ситуациях не дебажить отдельную страницу реализовал простое решение:
Чтобы каждый раз в таких ситуациях не дебажить отдельную страницу реализовал простое решение:
- В файле urlrewrite к тем правилам, работу которых хотим отслеживать добавляем «левый параметр» и и присваиваем ему значение магической константы __LINE__:
array("CONDITION" => "#articles\/([\-\_|^\/\w]+)\/#", "RULE" => "rubric=$1&ruleLine=".__LINE__, "ID" => "bitrix:news.list", "PATH" => "/articles/rubric-list.php"),
- Добавляем в init.php функцию:
if(!function_exists('urlRewriteDebug') && isset($_GET['urw'])) { /* * Debug urlrewrite * */ function urlRewriteDebug() { $ruleLine = intval($_REQUEST['ruleLine']); if(false !== $ruleLine && $ruleLine > 0) { $vLine = file($_SERVER['DOCUMENT_ROOT'].'/urlrewrite.php'); $ruleText = $vLine[$ruleLine-2].$vLine[$ruleLine-1].$vLine[$ruleLine].$vLine[$ruleLine+1]; preg_match_all('/[\'"](.+)[\'"].*\=\>.*[\'"](.+)[\'"].*/Usim', $ruleText, $arMatches); if(!is_null($arMatches)) $arUrlRewriteRule = array_combine($arMatches[1], $arMatches[2]); if('' !== $arUrlRewriteRule ['RULE']) preg_match_all('/&{0,}(\w+)=/Usim', $arUrlRewriteRule['RULE'], $arMatches); if(!is_null($arMatches)) foreach($arMatches[1] as $key) { $arUrlRewriteRule['$_REQUEST["'.$key.'"]'] = $_REQUEST[$key]; } echo '<pre>'; print_r($arUrlRewriteRule); echo '</pre>'; } return true; } }
- В header.php шаблона сайта вставляем строчки кода:
<?//Debug urlrewrite if(isset($_GET['urw'])) { urlRewriteDebug(); } ?>
- Открываем нужную нам страницу и добавляем в URL параметр urw.
Например, http://мой сайт/articles/php_and_web/?urw и видим отладочный массив:Array ( [CONDITION] => #articles\/([\-\_|^\/\w]+)\/# [RULE] => rubric=$1&ruleLine= [ID] => bitrix:news.list [PATH] => /articles/rubric-list.php [$_REQUEST["rubric"]] => php_and_web [$_REQUEST["ruleLine"]] => 41 )