无法从控制器加载codeigniter中的表单


Unable to load a form in codeigniter from a controller

我在php/codeigniter 中有一个简单的注册/登录注册项目

当我点击登录或注册按钮时,我总是会遇到这个特殊的错误

错误:"在此服务器上找不到请求的URL/CI/user/login。">

这是控制器文件user.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    class User extends CI_Controller{   
     public function __construct()
     {
      parent::__construct();
      $this->load->model('user_model');
     }
     public function index()
     {
      if(($this->session->userdata('user_name')!=""))
      {
       $this->welcome();
      }
      else{
       $data['title']= 'Home';
       $this->load->view('header_view',$data);
       $this->load->view("registration_view.php", $data);
       $this->load->view('footer_view',$data);
      }}
     public function welcome()
     {
      $data['title']= 'Welcome';
      $this->load->view('header_view',$data);
      $this->load->view('welcome_view.php', $data);
      $this->load->view('footer_view',$data);
     }
     public function login()
     {
      $email=$this->input->post('email');
      $password=md5($this->input->post('pass'));
      $result=$this->user_model->login($email,$password);
      if($result) $this->welcome();
      else        $this->index();
     }
     public function thank()
     {
      $data['title']= 'Thank';
      $this->load->view('header_view',$data);
      $this->load->view('thank_view.php', $data);
      $this->load->view('footer_view',$data);
     }
     public function registration()
     {
      $this->load->library('form_validation');
      // field name, error message, validation rules
      $this->form_validation->set_rules('user_name', 'User Name', 'trim|required|min_length[4]|xss_clean');
      $this->form_validation->set_rules('email_address', 'Your Email', 'trim|required|valid_email');
      $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');
      $this->form_validation->set_rules('con_password', 'Password Confirmation', 'trim|required|matches[password]');
      if($this->form_validation->run() == FALSE)
      {
       $this->index();
      }
      else
      {
       $this->user_model->add_user();
       $this->thank();
      }
     }
     public function logout()
     {
      $newdata = array(
      'user_id'   =>'',
      'user_name'  =>'',
      'user_email'     => '',
      'logged_in' => FALSE,
      );
      $this->session->unset_userdata($newdata );
      $this->session->sess_destroy();
      $this->index();
     }
    }
    ?>

这是视图文件registration_view.php

    <html>
<div id="content">
<div class="signup_wrap">
<div class="signin_form">

 <?php echo form_open("user/login"); ?>
  <label for="email">Email:</label>
  <input type="text" id="email" name="email" value=""/>
  <label for="password">Password:</label>
  <input type="password" id="pass" name="pass" value=""/>
  <input type="submit" class="" value="Sign in"/>
 <?php echo form_close(); ?>


</div><!--<div class="signin_form">-->
</div><!--<div class="signup_wrap">-->


<div class="reg_form">
<div class="form_title">Sign Up</div>
<div class="form_sub_title">It's free and anyone can join</div>

<?php echo validation_errors('<p class="error">'); ?>
<?php echo form_open("user/registration");?>
  <p>
  <label for="user_name">User Name:</label>
  <input type="text" id="user_name" name="user_name" value="<?php echo set_value('user_name'); ?>" />
  </p>
  <p>
  <label for="email_address">Your Email:</label>
  <input type="text" id="email_address" name="email_address" value="<?php echo set_value('email_address'); ?>" />
  </p>
  <p>
  <label for="password">Password:</label>
  <input type="password" id="password" name="password" value="<?php echo set_value('password'); ?>" />
  </p>
  <p>
  <label for="con_password">Confirm Password:</label>
  <input type="password" id="con_password" name="con_password" value="<?php echo set_value('con_password'); ?>" />
  </p>
  <p>
  <input type="submit" class="greenButton" value="Submit" />
  </p>
 <?php echo form_close(); ?>
</div><!--<div class="reg_form">-->
</div><!--<div id="content">-->
</html>

我认为主要问题是form_open('form'(

这是htaccess文件

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

您需要将完整的url传递给像这样的form_open函数

   echo form_open(base_url()."/user/login");

更改此项:<?php echo form_open("user/login"); ?>
对此:<?php echo form_open(base_url()."User/login"); ?>
在配置中:

$config['base_url'] = 'http://localhost/projectname/';
$config['index_page'] = '';

之后,如果不工作,请从url调用您的方法,如果工作,请将数据更正为您的方法!!!

编辑:在您的htaccess文件中,更改为。(另一个建议,不保证(

RewriteBase /project
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php/$1 [L]

检查您的/etc/apache2/apache2.conf/etc/apache2/httpd.conf(以存在的为准(。基本上,除非声明AllowOverride指令,否则apache不会确认.htaccess文件。

因此,如果子目录的完整路径是/var/www/html/subdirectory/ ,则必须打开上述配置文件,并将其添加到底部

<Directory /var/www/html/subdirectory/>
    AllowOverride all
</Directory>

别忘了重新启动apache!