我有一个控制器,例如:
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
的地址,我该怎么办?
我想用索引取消地址+没有它就可以使用分页。
答案 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中重写网址?
我不记得确切的语法,但是......