Codeigniter访问末尾带斜杠URL未触发404,如何配置返回404页面
CodeIgniter 末尾带斜杠URL返回404实现方案
CodeIgniter默认路由匹配逻辑会自动忽略URL末尾的斜杠,要实现末尾带斜杠的非目录URL返回404,可通过以下两种方案实现:
方案1:通过.htaccess规则拦截(性能最优,无需修改框架代码)
- 找到站点根目录的
.htaccess文件,在原有Rewrite规则前新增以下配置:
# 匹配末尾带斜杠的URL,排除实际存在的站点目录 RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ - [R=404,L]
- 若需要连真实存在的目录带斜杠访问也返回404,直接删除
RewriteCond %{REQUEST_FILENAME} !-d这一行即可。
方案2:通过框架前置钩子拦截(适配无.htaccess场景)
如果站点没有启用Apache重写规则,可通过框架钩子实现逻辑拦截:
- 打开
application/config/config.php,设置$config['enable_hooks'] = TRUE;开启钩子功能 - 打开
application/config/hooks.php,新增钩子注册配置:
$hook['pre_controller'] = array( 'class' => '', 'function' => 'check_trailing_slash', 'filename' => 'check_trailing_slash.php', 'filepath' => 'hooks', );
- 在
application/hooks目录下新建check_trailing_slash.php文件,写入校验逻辑:
function check_trailing_slash() { $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); // 排除根路径的斜杠,避免首页访问被误拦截 if ($path !== '/' && substr($path, -1) === '/') { show_404(); } }
- 该方案直接调用CodeIgniter原生
show_404()方法,返回的404页面和框架默认404完全一致。
效果验证
配置完成后测试即可:
- 访问
http://www.example.com/abc可正常加载页面 - 访问
http://www.example.com/abc/直接返回404错误页面
内容的提问来源于stack exchange,提问作者إرتقاء
相关产品推荐
相关产品推荐

