0

由于某些原因,我一直遇到 mod rewrite 的问题,我已经从 url 中删除了 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]

提前致谢 :)

4

2 回答 2

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/abc123www.domain.com/user/profile/user_profile/abc123

希望这可以帮助?

于 2012-11-16T10:35:05.730 回答
0

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

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

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

这样做的主要缺点是您的用户运行的任何奇怪的 url 都将被解释为可能的用户。如果某个名为forum的人想要查看他的个人资料,他可能会被重定向到某个论坛(如果有的话)。

于 2012-11-08T02:16:18.560 回答