由于某些原因我一直遇到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]
提前致谢:)
答案 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 的人想要查看他的个人资料,他可能会被重定向到论坛,如果是的话。