Codeigniter 2.1和.htaccess - 重写网址

时间:2012-09-26 09:30:16

标签: .htaccess codeigniter url-rewriting

我需要重写这个网址:

  

domain.com/mali_oglasi/index/1(任意数字)

为:

  

domain.com/mali_oglasi

在我的.htaccess文件中,我有这段代码:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

我该怎么做?

2 个答案:

答案 0 :(得分:1)

如果您想要的唯一方法是以不同于默认行为的方式映射控制器/方法,则可以使用route.php配置文件。请参阅此处的官方文档:http://codeigniter.com/user_guide/general/routing.html

在你的情况下你会有这样的事情:

$route['mali_oglasi/index/(:num)'] = 'mali_oglasi';

稍后在您的控制器中,您仍然可以使用以下方式获取原始数字:

$this->uri->rsegment(3);

而不是:

$this->uri->segment(3);

(请参阅此处的官方文档:http://codeigniter.com/user_guide/libraries/uri.html

修改

事实上,如果您只是希望在需要添加参数时摆脱“索引”段,您可能希望与我的第一个答案相反:

$route['mali_oglasi/(:num)'] = 'mali_oglasi/index/$1';

使用该行,“www.yourdomain.com/mali_oglasi/1”形式的每个请求都将由codeigniter解释为好像是“www.yourdomain.com/mali_oglasi/index/1”。这意味着控制器“mali_oglasi”的方法“index”将用于处理您的请求。

如果您需要检索数字,则需要使用:

$this->uri->segment(3);

因此,如果您的客户应该直接访问网址“www.yourdomain.com/mali_oglasi/index/1”,您仍然会检索好的uri细分。 ($this->uri->segment(n);route.php重写uri后给你第n个段,$this->uri->rsegment(n)在uri被重写之前给你第n个段。)

答案 1 :(得分:0)

我建议将用户重定向到新网址:

控制器中的

mali_oglasi>>在函数index

放下线

redirect('mali_oglasi');

e.g。

类mali_oglasi扩展了CI_Controller {

function Index($id){
    // Note : make sure you have loaded the url helper
    redirect('mali_oglasi');
}

}

注意:不要忘记加载url helper

注意:$config['index_page'] = '';

中设置index而不是application/config/config.php