Php 未找到重定向到控制器结果404页面

Php 未找到重定向到控制器结果404页面,php,.htaccess,codeigniter,laragon,Php,.htaccess,Codeigniter,Laragon,我正在Codeignitor中创建一个web应用程序,使用Laragon作为本地服务器。当我尝试“重定向”到控制器时,我得到“404页面未找到”。如果我重定向到视图-它可以工作。我可以使用其他方法访问控制器,如“表单打开” 这是我的.htaccess文件: RewriteEngine on RewriteCond $1 !^(index\.php|assets|images|js|css|uploads|favicon.png) RewriteCond %(REQUEST

我正在Codeignitor中创建一个web应用程序,使用Laragon作为本地服务器。当我尝试“重定向”到控制器时,我得到“404页面未找到”。如果我重定向到视图-它可以工作。我可以使用其他方法访问控制器,如“表单打开”

这是我的.htaccess文件:

    RewriteEngine on
    RewriteCond $1 !^(index\.php|assets|images|js|css|uploads|favicon.png)
    RewriteCond %(REQUEST_FILENAME) !-f
    RewriteCond %(REQUEST_FILENAME) !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
这是我的控制器-对于一个测试,我使用重定向到一个视图“页面登录”和一个控制器“私人区域”。我可以访问视图,但控制器发送到404页未找到

if($this->form_validation->run()){
    $result = $this->login_model->can_login($this->input->post('user_email'), $this->input->post('user_password'));
    if($result == ''){
        redirect('private_area');
    }
    else {
        $this->session->set_flashdata('message', $result);
        redirect('page-login');
仅供参考,我可以使用其他方法(如Form Open)访问控制器(在本例中为“注册”),如下所示:

<?php echo form_open('register/validation'); ?> 


为什么会出现404错误?

您的重定向语法不正确:

系统的结构如下所示:

<?php echo form_open('register/validation'); ?> 
redirect($uri='',$method='auto',$code=NULL)

请记住使用相对路径,如“/my\u controller/my\u function”

如本例所示:

重定向('/login/form/')

您需要使用以下命令自动加载/加载URL帮助程序:
$this->load->helper('URL')


语法正确,您需要使用以下命令自动加载/加载表单帮助程序:
$this->load->Helper('Form')

您的重定向语法不正确:

系统的结构如下所示:

<?php echo form_open('register/validation'); ?> 
redirect($uri='',$method='auto',$code=NULL)

请记住使用相对路径,如“/my\u controller/my\u function”

如本例所示:

重定向('/login/form/')

您需要使用以下命令自动加载/加载URL帮助程序:
$this->load->helper('URL')

语法正确,您需要使用以下命令自动加载/加载表单帮助程序:
$this->load->Helper('Form')

重定向()
函数

是否将“头重定向”到指定的URI。如果您指定将生成该链接的完整站点URL,但对于本地链接,只需将URI段提供给您想要定向的控制器即可创建该链接。该函数将基于您的配置文件值构建URL。(-)

因此,url必须是

redirect("/controller/method/parameters");
或完整url

在您的代码中,Codeigniter将查找
index()
方法的
private\u area
控制器。

重定向()
函数

是否将“头重定向”到指定的URI。如果您指定将生成该链接的完整站点URL,但对于本地链接,只需将URI段提供给您想要定向的控制器即可创建该链接。该函数将基于您的配置文件值构建URL。(-)

因此,url必须是

redirect("/controller/method/parameters");
或完整url

在您的代码中,Codeigniter将查找
私人区域控制器的
索引()
方法。

谢谢大家

所以我认为@Don'tPanic成功了。我以为“重定向”会指向一个控制器,但它指向一个路由。因此,我在Routes.php文件中创建了一个路由,其中

$route['private_area'] = 'private_area';
一切正常。这是正确的方法吗

Ie在Routes.php文件中定义路由…然后根据需要使用“重定向”调用它们?

谢谢大家

所以我认为@Don'tPanic成功了。我以为“重定向”会指向一个控制器,但它指向一个路由。因此,我在Routes.php文件中创建了一个路由,其中

$route['private_area'] = 'private_area';
一切正常。这是正确的方法吗


Ie在Routes.php文件中定义路由…然后根据需要使用“重定向”调用它们?

您正在混淆路由、控制器和视图的概念。如果你直截了当的话,事情会变得更清楚。您不会重定向到控制器或视图,而是重定向到路由。同样地,
form\u open()
不将控制器作为参数,而是作为路由,并且,请描述好。您在重定向函数中提到了private_区域,而您提到了控制器名称private area。两者都不同。你应该重定向到私人区域。谢谢@Don'tPanic!你搞定了。我想我解决了我的问题-见下面我的答案。干杯您正陷入路由、控制器和视图的概念中。如果你直截了当的话,事情会变得更清楚。您不会重定向到控制器或视图,而是重定向到路由。同样地,
form\u open()
不将控制器作为参数,而是作为路由,并且,请描述好。您在重定向函数中提到了private_区域,而您提到了控制器名称private area。两者都不同。你应该重定向到私人区域。谢谢@Don'tPanic!你搞定了。我想我解决了我的问题-见下面我的答案。干杯您不需要仅为此创建管线<代码>重定向(“/private\u area”)
在没有它的情况下也可以工作,它指向控制器
private\u area()
及其函数
index()
@Vickel,但它没有。但是,当我输入
redirect('private\u area/index')
时,它确实可以工作……我不知道为什么它需要定义函数index(),因为它应该默认为该函数……不是吗?这取决于您的基本url设置,文档说redirect()会将“头重定向”到指定的URI。如果您指定将生成该链接的完整站点URL,但对于本地链接,只需将URI段提供给您想要定向的控制器即可创建该链接。该函数将基于您的配置文件值构建URL。正如我在评论中链接到的文档中所述,这是一种标准的MVC模式,用于设置映射到
/[controller class]/[controller method]/[arguments]
的路由。如果您没有路由,CI将尝试猜测使用此模式做什么。因此严格地说,如果您的管线段精确地映射到相应的控制器和方法,则不需要管线。但是添加它们并不难,最终你可以清楚地、有文件记录地了解哪些路线映射到哪里——这是更好的做法。你不需要只为此创建路线<代码>重定向('/private_area')
在没有它的情况下也可以工作