我正在使用codeigniter并希望让我的门户网站更加友好。 我有一个控制器(文章)处理我的门户网站上的每篇文章。 URL如下所示:
example.com/articles/category-sub-category/article-name
我正在使用mod重写模块来隐藏我的index.php和codeigniter路由以隐藏处理每个调用的控制器操作。
我也想隐藏文章,但如果我隐藏它,每次调用都会转到文章控制器,这不是我想要的,因为我希望我的网址看起来像这样:
example.com/category-sub-category/article-name
我已尝试使用routes.php中的regexp路由规则,但我发现无法使其正确。
答案 0 :(得分:3)
使用CI的路由功能,您必须为每个类别设置路由,如此...
$route['category_one/:any'] = 'articles/category/category_one';
$route['category_two/:any'] = 'articles/category/category_two';
//.. and on and on until you've routed them all
您必须在category
控制器中使用Articles
方法,否则您还必须为每个类别创建一种方法,这种方法将无法控制。
至少使用CodeIgniter,你最好将articles
部分保留在你的网址中并按照以下方式执行:
$route['articles/(:any)'] = 'articles/category/$1';
但您仍需要在控制器中创建category
方法。
答案 1 :(得分:3)
我几天前非常广泛地回答了这个问题:
How to get an array of all controllers in a Codeigniter project?
答案 2 :(得分:2)
OK!问题解决了!
我在以下网站上找到了我的问题的解决方案: http://bizwidgets.biz/web-design/codeigniter-routes-trick-removing-controller-names-from-the-uri-to-keep-urls-short/
$route['^(?!account|about|showcase|etc).*'] = "articles/read/$0";
这一行将每个非控制器请求返回给我的文章控制器,所以我有我想要的网址:)
答案 3 :(得分:0)
RewriteCond %{REQUEST_URI} !^articles(?:/|$)
RewriteCond %{REQUEST_URI} !^static1(?:/|$)
RewriteCond %{REQUEST_URI} !^static2(?:/|$)
...
RewriteRule ^/(.*) /articles/$1 [QSA,NE]