【问题标题】:Codeigniter routing throws 404 page not found errorCodeigniter 路由抛出 404 page not found 错误
【发布时间】:2019-06-10 09:08:49
【问题描述】:

当我使用 url as 时

mysite.com/index.php/user/user 方法正在被调用。

但是当我在routes.php 中添加以下行以便我可以使用自定义 url 访问该函数时。 它给我带来了错误。 404 Not Found

我想使用 url 作为mysite.com/user 访问方法

$route['user']['get'] = 'user/user';

user.php 存在于控制器目录中

    <?php
    use Restserver\Libraries\REST_Controller;
    defined('BASEPATH') OR exit('No direct script access allowed');

    require APPPATH . 'libraries/REST_Controller.php';
    require APPPATH . 'libraries/Format.php';

    class User extends REST_Controller {

        function __construct()
        {
            // Construct the parent class
            parent::__construct();
        }

        public function user_get(){
            $this->set_response("request recieved", REST_Controller::HTTP_OK); // OK (200) being the HTTP response code
        }
    }

[第二个问题]

如何创建路由来访问控制器目录中某些文件夹中存在的控制器。

假设控制器文件存在于controllers/api/v1/ 目录中,文件名为user.php

注意: 我已经尝试了用户在其他帖子中提供的所有解决方案,但问题没有得到解决。


编辑:问题已解决

路由现在工作得很好。我认为问题是,我打电话给 mysite.com/user ,而不是我应该打电话给 mysite.com/index.php/user

也解决了 index.php 在 url 中的第二个问题。 我正在对 .htaccess 文件中的 Application 文件夹中的文件进行更改。 我在root folder 中创建了一个.htaccess 文件,然后添加了下面提到的代码行

<IfModule mod_rewrite.c>
    RewriteEngine On
      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

【问题讨论】:

  • User.php 在名为user 的子文件夹中,即controllers/user/Users.php?您是否尝试通过 get 请求访问 user
  • 没有。 User.php 文件位于controllers 文件夹内,即controllers/User.php。是的,我正在尝试使用获取请求进行访问。
  • 1) 您是要从 URL 中删除 index.php,还是要添加路由?你还没有给我们看the .htaccess update required to get rid of index.php。一次做一件事。 2) 我认为 CodeIgniter 曾经支持在控制器方法名称中使用动词,但是 it is not mentioned in the docs anymore - 您是否尝试过仅使用 user() 作为您的方法名称?
  • 3) 如果您仍然遇到问题,从简单的开始 - 摆脱 REST_Controller.php,摆脱 Format.php,删除什么都不做的 __construct(),让您的方法只返回一些纯文本...
  • 我尝试使用名为 user() 的函数,但它没有被 get 请求调用,我正在尝试从 url 中删除 index.php 并添加自定义路由。

标签: php codeigniter routes codeigniter-3


【解决方案1】:

您已将路线设置为

$route['user']['get'] = 'user/user';

指向用户控制器和用户方法。但是在您的控制器中,您有一个名为 user_get 的方法。

所以这里最简单的解决方法是更改​​您的路线以指向正确的方法。 注意:您没有称为“用户”的方法,那为什么在路由中?

所以这个...

$route['user']['get'] = 'user/user'; // the user method does not exist

会变成……

$route['user']['get'] = 'user/user_get'; // the user_get method does exist

更新:要从您的 URL 中删除 index.php,您的 .htaccess 可能是

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

并确保在 applications/config/config.php

中添加 base_url
$config['base_url'] = 'http://example.com';  // Change to your sites URL
$config['index_page'] = '';  // remove index.php                

【讨论】:

  • 我已经尝试过这个解决方案,它不起作用。我打电话给mysite.com/user。由于某些原因,我仍然收到 404 错误。
  • @VickySalunkhe 它确实有效 - 我已经测试过它以前从未在路由中使用过 http 动词......我添加了一些东西来帮助你解决 index.php 问题。让我知道这是否有效。
  • 嗨,蒂姆,正如您所说,我已将代码复制到存在于 Application 文件夹中的 .htaccess 文件中。并检查了config文件,但仍然无法在没有index.php的情况下访问,并且路由方法的问题仍然存在。
  • 路由现在工作得很好。我认为问题是,我打电话给mysite.com/user,而不是我应该打电话给mysite.com/index.php/user,所以现在问题仍然存在1)如何从url中删除index.php。
  • 包含我提供的代码的 .htaccess 文件需要位于 index.php 所在的文件夹中。听起来您更改了应用程序文件夹中的那个。那不是正确的位置。对不起,我没有更具体。如果那里没有,则需要创建它
猜你喜欢
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 2020-09-14
  • 2011-11-09
  • 2017-09-03
  • 2016-09-10
相关资源
最近更新 更多