带有 CodeIgniter 的漂亮 URL
Posted
技术标签:
【中文标题】带有 CodeIgniter 的漂亮 URL【英文标题】:Pretty URL's with CodeIgniter 【发布时间】:2013-07-09 05:21:51 【问题描述】:我对 CI 相当陌生,并且一直在尝试如何生成干净的 URL。我之前通过编辑我的 .htaccess 文件完成了这项任务,但没有使用框架。
RewriteCond %REQUEST_URI !^/(css|js|img)/
RewriteRule ^profile/([^/]*)$ profile.php?id=$1 [L]
使用 CI,我尝试了以下方法:
#Get rid of the index.php that's in the URL by default
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [L]
# Profile page
RewriteCond %REQUEST_URI !^/(css|js|img)/
RewriteRule ^profile/([^/]*)$ profile?id=$1 [L]
我知道,默认情况下,URL 中控制器(在本例中为 Profile 控制器)名称后面的值将调用控制器类中具有相同名称的函数。但是,如果在控制器后指定的 URL 中没有值,默认情况下会调用 index 函数。我计划将函数名称留空,以便默认调用索引函数。但是,重写规则不起作用。
有什么想法吗?
【问题讨论】:
只需使用 CI 的路由来处理配置文件 URL 结构。 【参考方案1】:.htaccess
你可以这样做
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [L]
# Profile page
RewriteCond %REQUEST_URI !^/(css|js|img)/
RewriteRule ^profile/([^/]*)$ profile/index/$1 [L]
在重写中你必须提到函数名,无论是索引函数还是其他函数
同样可以使用 CI 路由routes.php
$route['profile/(:any)'] = "profile/index/$1";
现在可以在profile的索引函数中获取参数
function index($id)
echo $id;
echo $this->uri->segment(3);
//Both will result the same
【讨论】:
这很好用。但是,当我尝试通过使用 $route['users/(:num)/(:num)'] = "users/index/$1/$2"; 添加第二个变量来对此进行扩展时在 routes.php 文件中,当 URL 中缺少第二个变量时,它不起作用。 $2 变量是可选的。它不必在那里。但是,如果它在 URL 中,它应该可以工作。 所以先用单个参数重写routes.php中的两个路由,然后再重写其他 谢谢!效果很好!以上是关于带有 CodeIgniter 的漂亮 URL的主要内容,如果未能解决你的问题,请参考以下文章
带有 Summernote 的 Codeigniter - 验证问题
codeigniter 中的友好 url,带有 url 中的变量