Codeigniter中的路由 - 404页面未找到

5

有人能告诉我问题出在哪里吗?

这是我的控制器:

class Support extends CI_Controller {
    public function __construct()
    {
        parent::__construct();
        $this->load->model('support_model');
        $urlarray = array("index","delete");
        if(!in_array($this->uri->segment(2),$urlarray)){
            $this->viewticket($this->uri->segment(2));
        }
    }

    public function viewticket($id){
        if(!empty($id)){
            $this->load->view('templates/logged_header');       
            $this->load->view('support/view');
            $this->load->view('templates/footer');
        }
    }
}

这是我的routes.php文件

$route['default_controller'] = "welcome";
$route['benefits'] = 'welcome/benefits';
$route['faqs'] = 'welcome/faqs';
$route['distributors'] = 'welcome/distributors';
$route['contact'] = 'welcome/contact';
$route['purchase'] = 'welcome/purchase';

//login routes
$route['login'] = 'login/index';
$route['logout'] = 'login/logout';

$route['404_override'] = '';

localhost/ciproj/support/hello-world 给了我一个 404 页面未找到 的错误

如果我在 $this->load->view('templates/footer'); 后加上 exit;,页面将会显示为空白页。

我没有在路由中添加关于 support 的任何内容,其他方法都可以工作。我是否遗漏了些什么路由方面的设置?

感谢您的帮助。


hello-world指向哪里?你是否为此声明了一个route?请展示application/config/routes.php的内容。 - Hashem Qolami
你好世界将自动指向支持结构,不是吗?$this->viewticket($this->uri->segment(2)); - Satish Ravipati
这真的很奇怪,除了索引和删除之外,我可以在viewticket()中输出。 - Satish Ravipati
请问您能告诉我如何处理这个路由吗? 除了添加和删除之外,所有操作都应该转到viewticket()函数中吗? - Satish Ravipati
如果(!in_array($this->uri->segment(2),$urlarray))...如果hello-world不在$urlarray中,则调用viewticket(),这是正确的。 - Satish Ravipati
抱歉,我的错。那很奇怪。你在routes.php配置文件中使用了任何路由吗? - Hashem Qolami
2个回答

7

根据标题,首先要检查您的服务器是否正在使用CGI / FastCGI运行PHP(您可以通过phpinfo()简单地进行检查)。

如果是这样,请更改config.php中的以下内容:

$config['uri_protocol'] = "REQUEST_URI";

回到主题,您可以在routes.php文件中使用以下单行路由来实现:
$route['support/(?!index)(?!delete)(:any)'] = "support/viewticket/$1";

请从您的__construct方法中删除这些行:

$urlarray = array("index","delete");
if(!in_array($this->uri->segment(2),$urlarray)){
    $this->viewticket($this->uri->segment(2));
}

请告诉我它是如何工作的。


-1

由于上面的答案对我不起作用,我只是在我的default_controller中添加了这个函数,然后它就起作用了。

    public function __construct() {
    parent::__construct();
    $this->load->helper('url');
    }

不,这不是正确的解决方案。我们可以考虑自动加载 url 助手。 - Satish Ravipati
1
我并没有说这是每个人的正确解决方案。在我的情况下,这个方法解决了问题。这对某些人可能有效。 - Niamatullah Bakhshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接