Если вы хотите чтобы в режиме ЧПУ фильтра, если в url есть лишние/несуществующие/неправильные параметры, то сайт не игнорировал их, а выводил 404 ошибку, то это инструкция для вас.

Дело в том что фильтр не может знать обо всех возможных параметрах, которые могут быть в url, чтобы однозначно определить лишние они или нет. Например в интернет-магазине Битроник сортировка реализована через ЧПУ. У других сайтов могут быть свои особенности. Поэтому фильтр, если встречает неправильные параметры в url он устанавливает константу KOMBOX_FILTER_ERROR_404 = Y. И уже по этой константе вы можете на конкретном сайте принимать решение выводить ошибку 404 или нет, делая если потребуется дополнительные проверки. Начиная с версии 2.5.6 можно получить массив параметров, который фильтр посчитал недействительными. Массив возвращает функция CKomboxFilter::GetUnavailableParams().

Вот пример обычного обработчика без проверок, который в случае если константа KOMBOX_FILTER_ERROR_404 = Y выводит страницу с 404 ошибкой:

<?
AddEventHandler('main', 'OnEpilog', 'Redirect404');

function Redirect404() {
    
    define('PATH_TO_404', '/404.php');
    if( 
	!defined('ADMIN_SECTION') &&  
	defined('KOMBOX_FILTER_ERROR_404') &&  
	file_exists($_SERVER['DOCUMENT_ROOT'].PATH_TO_404) 
    ) 
    {

        global $APPLICATION;
        $APPLICATION->RestartBuffer();
        
        include($_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/header.php');
        include($_SERVER['DOCUMENT_ROOT'].PATH_TO_404);
        include($_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/footer.php');
    }
}
?>

И пример с проверкой, в котором мы будем учитывать, что url могут быть параметры сортировки по цене:

<?
AddEventHandler('main', 'OnEpilog', 'Redirect404');

function Redirect404() {
    
    define('PATH_TO_404', '/404.php');
    if( 
	!defined('ADMIN_SECTION') &&  
	defined('KOMBOX_FILTER_ERROR_404') &&  
	file_exists($_SERVER['DOCUMENT_ROOT'].PATH_TO_404) 
    ) 
    {
	$params = array();
	if(CModule::IncludeModule('kombox.filter')){
		$params = CKomboxFilter::GetUnavailableParams(); //недейсвительные параметры 
	}
		
	//проверка каких-то специальных параметров
	if(!empty($params)){
		foreach($params as $key => $param){
			if(in_array($param, array('sort_price_asc', 'sort_price_desc')))
				unset($params[$key]); //удаляем из массива недейсвительных параметров сортировку по цене
		}
	}
		
		
	if(!empty($params)){
		global $APPLICATION;
		$APPLICATION->RestartBuffer();
			
		include($_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/header.php');
		include($_SERVER['DOCUMENT_ROOT'].PATH_TO_404);
		include($_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/footer.php');
	}
    }
}
?>
Данный код следует поместить в файл /bitrix/php_interface/init.php (если на сайте такого файла нет, то его нужно создать).



 Включил ЧПУ, теперь при сортировке фильтр сбивается, как исправить? | Описание курса | Как убрать промежуточные значения в слайдере?