Codeigniter路由和mod_rewrite

时间:2012-11-08 02:07:54

标签: php codeigniter codeigniter-2

由于某些原因我一直遇到mod重写问题,我已经从url ok中删除了index.php,但是当我尝试对配置文件执行相同操作时,它会显示一些联系人网站管理员页面。 现在我选择路线选项,但我有一点问题。

My url is http://website.com/user/profile/user_profile/username 

我的路线中有这个

$route['profile/(:any)'] = 'user/profile/user_profile';

因此,当我输入website.com/profile/username时,它可以正常工作。我的问题是,如果我想摆脱/ profile并拥有website.com/username,如何通过路线进行操作呢?

请注意,我不妨在这里使用modrewrite,所以你所有聪明的头脑都可以告诉我哪里出错了。

Options FollowSymLinks
RewriteEngine on

RewriteCond $1 !^(index\.php|images|css|javascript|cron|sit-env|robots\.txt)

RewriteCond $1 !^(index\.php|javascript|sit-env|robots\.txt)

RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond $1 !^(index\.php|images|css|javascript|cron|sit-env|robots\.txt)

RewriteCond $1 !^(index\.php|javascript|sit-env|robots\.txt)

RewriteRule ^([0-9a-zA-Z]+)([\/]?)$ /user/profile.php/user_profile/$1 [L]

提前致谢:)

2 个答案:

答案 0 :(得分:1)

我只是使用404_override方法捕获CodeIgniter中尚未定义的任何路由,然后在显示404页面之前完成数据库查找。

我的例子实际上是用于CMS,但可以轻松更改以满足您的要求。

public function error_404()
{
    $Path = trim(uri_string(), '/');
    $this->load->model('page_model');
    $Page = $this->page_model->GetByPath($Path);
    if(empty($Page))
    {
        $ViewData = array
        (
            'PageTitle' => 'Error 404'  
        );
        $this->load->view('error_404', $ViewData);
        return;
    }
    else
    {
        $ViewData = array
        (
            'PageTitle' => $Page->Title,
            'Keywords' => $Page->Keywords,
            'Description' => $Page->Description,
            'CurrentPage' => $Page->Path,
            'Page' => $Page
        );
        $this->load->view('generic', $ViewData);
    }
}

在我的application/config/routes.php文件中,我只需输入

$route['404_override'] = 'controller/error_404';

controller替换为包含error_404操作的控制器。

您可以使用细分馆集来查找传递给www.domain.com/username的用户名,如果不符合原始请求,则可以使用

$route['profile/(:any)'] = 'user/profile/user_profile/$1';

上述内容会将www.domain.com/profile/abc123路由到www.domain.com/user/profile/user_profile/abc123

希望这有帮助吗?

答案 1 :(得分:0)

如果你走的是路线,你可以这样做。

$route['(:any)/'] = 'user/profile/user_profile';

但请注意,规则从上到下进行评估。最后保留它,因此,如果您的站点路由都不起作用,它将尝试将其重定向到user_profile控制器。

您对此的主要看法是,您的用户运行的任何奇怪网址都将被解释为可能的用户。如果名为 forum 的人想要查看他的个人资料,他可能会被重定向到论坛,如果是的话。