在CI框架使用伪静态时,某些情况下伪静态并不适用。CI框架在包含多页链接时候如果使用伪静态就会在链接地址尾部加上事先自定义的后缀(例.html)。

但是在某些最后一个参数当使用命令为一个数字时候。控制器将会把.html一并接收,从而使接下来的执行出现异常。

 

操作之前我们需要定义下伪静态后缀:

找到./application/config/config.php文件60行附近设置:

1
$config['url_suffix'] = '.html';

解决方案开始

找到 ./system/core/URI.php文件280行附近_remove_url_suffix 函数可添加:

1
$this->uri_string = str_replace($this->config->item('url_suffix'), '', $this->uri_string);
更新CI3.0 在154行之后添加此句。

此举可以在接收地址栏参数时候排除自定义的后缀名,解决隐患。

接着,在分页类使用过程中,以下某种情况将会出现:
当配置参数$config[‘base_url’] 使用 site_url()点击非首页时候:

http://127.0.0.1/article/list/1.html/10

当配置参数$config[‘base_url’] 使用 base_url()点击首页时候根本没见到自定义的后缀好吗,亦或者这样:

http://127.0.0.1/article/list/1/.html

这个地址看起来太糟糕了有木有,所以我们将会把系统库的页面配置进行修改,在./system/libraries/Pagination.php 文件中225行附近$output=”;后添加

1
2
$this->suffix = $CI->config->item('url_suffix');
$this->first_url= rtrim((($this->first_url == '') ? $this->base_url : $this->first_url), '/').$this->suffix;
更新CI3.0 在556行之后添加此内容,注意$CI->config->item('url_suffix');已改为$this->CI->config->item('url_suffix');。然后分别在566、580、612行中的$first_url替换为 $this->first_url

这样就能避免出现以上两种情况。

注意:使用分页类时,配置参数$config[‘base_url’] 使用 base_url();而不用site_url();

附赠

$Str['count_page'] = ceil($total / $limit);//总页数
$Str['this_page'] = $offset / $limit + 1;//当前页