ci4 项目访问 /home 出现 404 是因未正确配置 web 根目录、baseurl 和路由;需将 documentroot 指向 public/,设置 $baseurl 为 http://localhost/myapp,注册 $routes->get('/home', 'home::index'),并清除路由缓存验证。

你刚把 CodeIgniter 4 项目放进 XAMPP 的 htdocs 目录,浏览器访问 http://localhost/myapp/home 却跳出 404 错误提示“Can't find a route for 'get: home'”,不是控制器没写、不是文件名错了、不是方法不存在——而是 CI4 根本没被告诉“/home”该交给谁处理。
确认 Web 根目录指向 public/
打开 XAMPP 控制面板 → Apache → Config → httpd.conf,找到 DocumentRoot 行,确保它指向的是项目内 【public/ 目录】,例如:DocumentRoot "C:/xampp/htdocs/myapp/public"。若指向 myapp/ 或 myapp/app/,CI4 会直接拒绝请求或暴露敏感文件。
同时检查对应 <directory></directory> 区块中是否包含 AllowOverride All,否则 .htaccess 不生效,URL 里将强制出现 index.php。
配置 App Base URL
编辑 app/Config/App.php,找到 public $baseURL 属性,设为完整协议+域名,结尾不加斜杠:
public $baseURL = 'http://localhost/myapp';
⚠️ 若写成 'http://localhost/myapp/public/' 或留空,CSS、JS、图片全部 404;若用 127.0.0.1 而非 localhost,部分浏览器可能因 Cookie 策略拒绝加载资源。
注册基础路由
打开 app/Config/Routes.php,在 $routes->set404Override() 之前插入:
$routes->get('/home', 'Home::index');
这行代码的意思是:当收到 GET 请求且 URI 是 /home 时,交由 App\Controllers\Home 类的 index() 方法处理。注意大小写必须完全匹配——Home.php 文件里定义的是 class Home,不是 home 或 HOME。
验证并清除路由缓存
第一步:在终端进入项目根目录(含 spark 文件的位置),执行:
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
php spark cache:clear
第二步:立即执行:
php spark routes
你会看到当前所有已注册的有效路由列表,其中必须包含一行 GET | /home | App\Controllers\Home::index。如果没出现,说明上一步的 Routes.php 修改未生效——常见原因是文件保存编码不是 UTF-8 无 BOM,或 PHP 语法错误导致整个文件解析失败。
添加动态参数路由
方法一:用数字占位符
$routes->get('/product/(:num)', 'Product::view/$1');
访问 /product/123 时,Product::view() 方法会自动接收 $id = 123 作为第一个参数。
方法二:用任意字符占位符
$routes->get('/user/(:any)', 'User::profile/$1');
这个规则能匹配 /user/john 或 /user/jane-doe_2024,但要注意它比静态路由更宽泛,必须放在 /home 这类精确路由之后,否则 /home 永远不会被匹配到。










