Php 未找到重定向到控制器结果404页面
我正在Codeignitor中创建一个web应用程序,使用Laragon作为本地服务器。当我尝试“重定向”到控制器时,我得到“404页面未找到”。如果我重定向到视图-它可以工作。我可以使用其他方法访问控制器,如“表单打开” 这是我的.htaccess文件: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
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')
在没有它的情况下也可以工作