如何使用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
相关产品推荐
相关产品推荐

