You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Codeigniter 3隐藏URL中的控制器名称与方法名称

CodeIgniter 3 隐藏URL中控制器和方法名的解决方案

你之前配置不生效的核心原因如下:

  • 路由匹配顺序错误:CI3路由按从上到下的优先级匹配,无前置规则直接写(:any)会拦截所有正常控制器的访问,导致路由逻辑冲突
  • 正则规则不匹配实际slug:你的文章地址带短横线-,你使用的([a-zA-Z0-9]+)规则未包含短横线,无法匹配到实际的文章路径
  • 部分场景是.htaccess重写规则配置错误,未隐藏入口文件index.php导致路由不生效

步骤1:调整application/config/routes.php配置

所有除文章详情之外的路由(后台、用户中心、首页等)必须放在最前面,优先级高于文章路由避免被拦截,最后再加文章的统一路由规则:

// 先写所有其他正常业务的路由,示例如下,可根据你的实际业务调整
$route['admin'] = 'Admin/index';
$route['user/(:any)'] = 'User/$1';
$route['default_controller'] = 'CommonPages/index'; // 保留你原本的默认控制器配置
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

// 最后加文章详情的统一路由,匹配包含字母、数字、短横线、下划线的slug格式
$route['([a-zA-Z0-9_-]+)'] = 'CommonPages/postDetails/$1';

上述规则可覆盖所有你现有文章的slug格式,不需要为单篇文章单独配置路由。


步骤2:配置根目录.htaccess隐藏入口文件

如果还未配置重写规则,在CI项目根目录(和index.php同级)创建.htaccess文件,写入以下内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

之后打开application/config/config.php修改三处配置:

$config['base_url'] = 'http://www.mydomain.com/'; // 替换为你的实际域名
$config['index_page'] = ''; // 删掉原有默认值'index.php'留空即可
$config['uri_protocol'] = 'REQUEST_URI'; // 保证路由解析逻辑正常

补充说明:可以在postDetails方法中先校验传入的slug是否对应已发布的文章,不存在则直接返回404页面,避免无效地址被路由到该方法。

配置完成后直接访问www.mydomain.com/social-testing-post即可自动映射到对应文章页面。

内容的提问来源于stack exchange,提问作者Jennifer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:15:03