Это определенно ваш собственный маршрут, не могли бы вы попробовать yoursite.com/user/id/?page=2, потому что я думаю, что строка id? Page = 2 передается как один параметр.
Вы также можете выполнить отладку, распечатав массив переданных URL-ключей:
echo '<pre>';
print_r($this->uri->segment_array());
echo '
и вы получите все параметры, переданные вашему действию контроллера. Вы также можете увидеть этот ответ: Обработка вопросительного знака в URL в codeigniter о расширении основного класса URI, если это необходимо.
Я надеюсь, что это поможет, в противном случае будет полезна дополнительная информация, например, какие URL-ключи передаются в вашем контроллере, когда вы используете обычный запрос, например site.com/user/id, и когда вы делаете site.com/user/id? страница = 2 запроса.
****** РЕДАКТИРОВАТЬ **********
Если вы используете CI 1.7.1 или 1.7.2, вы получаете страницу [1] =>, потому что в методе _fetch_uri_string у вас есть что-то вроде этого:
if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '')
{
$this->uri_string = key($_GET);
return;
}
Поскольку у вас есть site.com/user/id/?page=2, это означает: $ _GET ['page'] = 2, а page - это имя ключа в $ _GET
Пожалуйста, используйте ссылку выше о том, как расширить этот класс в вашем приложении и добавить сюда свою собственную логику, например, что-то вроде этого будет работать для 1.7.1 или 1.7.2
if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '')
{
//Comment this line cause you don't need it
//$this->uri_string = key($_GET);
//fetch the current page number if there is one
$page_number = (int) $_GET['page'];
//Set the uri_string here with the proper id and pass the id (which you should get here too) and the page number as second parameter then just return; to stop execution further
$this->uri_string = 'dashboard/index/id/'.$page_number
return;
}
//In your dashboard controller:
//Set default values to 0 and process further
public function index($id=0, $page_number=0)
{
}
Надеюсь, это поможет