Вариант 1: суть: разбираем адрес запроса. анализируем параметры на наличие первой страницы. при наличии его - убираем ео из параметров, пересклеиваем строку запроса, формируем новый адрес с учетом вырезки и делаем редирект. минусы: больше строк плюсы: нет неочевидных регулярок $parsed_parts=parse_url($_SERVER['REQUEST_URI']);$par=array();parse_str($parsed_parts['query'], $par);if(isset($par['page']) && $par['page']=='1'){ unset($par['page']); $new_location=SITEBILL_MAIN_URL.$parsed_parts['path'].(count($par)>0 ? '?'.http_build_query($par) : ''); header('HTTP/1.1 301 Moved Permanently'); header('Location: '.$new_location); exit();}Вариант 2: суть: регуляркой ищем в строке запроса подозрительные куски вида ?page=1 и &page=1, При наличии их даем команду на замену. Но замену проводим не в лоб, а избирательно: /apps/?page=1¶mА=x¶mB=y =============> ?page=1& меняем на "?" что бы сохранить целостность строки запросы и просто убить первое звено /apps/?page=1 =============> ?page=1 "короткая" строка запроса: меняем на пустоту /apps/?paramА=x&page=1¶mB=y =============> &page=1 меняем на пустоту (удаляем звено) порядок замен важен! минусы: для фанатов регулярок минусов нет, но необходимость вариативнх действия после использования регулярки, сводит профит от ее применения к мизеру плюсы: меньше строк $r_uri = $_SERVER['REQUEST_URI'];if (preg_match("#([\?\&]page=1)\D*$#", $r_uri, $matches)) { $new_location=SITEBILL_MAIN_URL.str_replace(array('?page=1&', '?page=1', '&page=1'), array('?', '', ''), $r_uri); header('HTTP/1.1 301 Moved Permanently'); header('Location: '.$new_location); exit();}