Codeigniter分页,没有索引功能

时间:2011-10-10 12:28:00

标签: php codeigniter

我有一个控制器,例如:

class Users extends CI_Controller
{
    function index()
    {
        $this->load->library('pagination');

        $config['base_url'] = base_url() . 'index.php/users';
        $config['total_rows'] = 55;
        $config['per_page'] = 10;
        $this->pagination->initialize($config); 

        echo $this->pagination->create_links();
    }
}

然后分页将是:

base_url() . 'index.php/users/10
base_url() . 'index.php/users/20
base_url() . 'index.php/users/30
..

问题

它显示链接很好,但当我点击它显示404。 只有当链接像这样(带有函数索引)时,它才能正常工作:

base_url() . 'index.php/users/index/10
base_url() . 'index.php/users/index/20
base_url() . 'index.php/users/index/30
..

无论如何,我不希望用户看到index的地址,我该怎么办? 我想用索引取消地址+没有它就可以使用分页。

3 个答案:

答案 0 :(得分:2)

索引必须在那里,否则codeigniter将不知道调用哪个函数(控制器中的“index()”函数)。

最好的办法是使用URI路由。

添加类似这样的内容(未经测试):

$route['users/page/:num'] = "users/index";

进入文件“application / config / routes.php”

然而,分页库仍然可以添加索引,在这种情况下,您需要扩展它或创建自己的索引。但是,使用以下基本URL可能有效:

class Users extends CI_Controller
{
    function index()
    {
        $this->load->library('pagination');

        $config['base_url'] = base_url() . 'index.php/users/page/';
        $config['total_rows'] = 55;
        $config['per_page'] = 10;
        $this->pagination->initialize($config); 

        echo $this->pagination->create_links();
    }
}

这是未经测试的。很抱歉未经测试的示例,但您肯定需要uri路由来执行您需要的操作,有关于uri路由的更多信息here

为了解决旧uri工作中的任何SEO问题,您可以尝试以下任何一种方式。

要在每次用户点击您不想显示的uri格式时重定向,您可以将其置于用户控制器中index()函数的顶部,将其重定向到正确的版本。

$this->load->helper('url');
$current_uri = uri_string();
if(strpos($current_uri, 'users/index'))
{
    $new_uri = str_replace('users/index','users',$current_uri);
    redirect($new_uri);
}

或者,您可以在HTML中设置规范元标记,这告诉搜索引擎蜘蛛,虽然它所查看的页面应该被视为规范标记中的页面,而不是地址栏。详细了解规范标记here

<link rel="canonical" href="<?php echo site_url('users/'.$page_num); ?>" />

当然,您必须根据需要调整变量。

你也可以通过htaccess做到这一点但是没有办法在我厌倦试图提供任何例子时进行测试。

答案 1 :(得分:1)

试试这个:

$route['users'] = "users/index";
$route['users/([0-9]+)] = "users/index/$1";

答案 2 :(得分:0)

也许你可以尝试在.htaccess中重写网址?

我不记得确切的语法,但是......