【问题标题】:Not accessing the Controller functions and resulting 404 page not found error in CI 3未访问控制器功能并导致 CI​​ 3 中未找到 404 页面错误
【发布时间】:2017-10-21 21:59:19
【问题描述】:

我安装了 CI 3 并添加了已重命名的以前版本的控制器和模型文件。我浏览了这些文件,文件名的第一个字母是大写的。 在本地主机上运行该站点时,即http://localhost:81/sitename/ 它会显示主页。 但是当控制器名称及其函数名称附在 url 上时,即 - http://localhost:81/sitename/login 它会导致

404 页面未找到
未找到您请求的页面。

.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]

config.php

    $config['base_url'] = 'http://localhost:81/sitename/';

    $config['index_page'] = '';
   $config['uri_protocol']  = 'REQUEST_URI'; //tried with AUTO also

routes.php

$route['default_controller'] = 'member';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

自动加载.php 我已经提到了 url 助手

$autoload['helper'] = array('url', 'file');

控制器成员.php

<?php 
class Member extends CI_Controller {

    private $controller = '';
    private $data = array();
    private $base_layout = '';

    function __construct() {
        parent::__construct();
        // $this->load->library('input');
        $this->load->library('email');
        $this->load->model('member_model');
        $this->controller = strtolower(__CLASS__);
        $this->base_layout = 'layouts/main_content';
        $this->is_logged();
    }

    function is_logged() {
        if(!$this->session->userdata('logged_in'))      

            $this->base_layout = 'layouts/login';
            $this->load->view('layouts/login');
    }
 }

控制器登录.php

<?php 

class Login extends CI_Controller {

    private $controller = '';

    function __construct() {
        parent::__construct();
        $this->controller = strtolower(__CLASS__);
        $this->load->model('login_model');

        $this->is_logged();
    }

   public function index() {
        $this->load->view('layouts/login');
    } 

    function is_logged() {
        date_default_timezone_set('Asia/Singapore');
        $sess_data = $this->session->userdata('logged_in');

        if($sess_data) {
            if($sess_data['user_type']=="pre"){
            $c_time = mktime();
            //$c_time = date('h:i:s a');
            $open = strtotime('Today 10am');
            $close = strtotime('Today 8pm');

            if ($c_time > $open && $c_time < $close) {
                redirect('member', 'refresh');
            } else {
                $this->session->unset_userdata('logged_in');
                redirect('login', 'refresh');
            }
            }else{
            redirect('member', 'refresh');}
        }

    }


    function auth() {
        date_default_timezone_set('Asia/Kolkata');
        $this->load->library('form_validation');

        $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');

        if($this->form_validation->run() == FALSE) {
            //Field validation failed.  User redirected to login page           
            redirect('login', 'refresh');
        } elseif($this->input->post('usertype')!="admin") {

            $c_time = mktime();
            //$c_time = date('h:i:s a');
            $open = strtotime('Today 10am');
            $close = strtotime('Today 8pm');

            if ($c_time > $open && $c_time < $close) {
                redirect('member', 'refresh');
            } else {
                redirect('login', 'refresh');
            }
            //redirect('member', 'refresh');

        }

    }
}

当我尝试使用以下链接时,主页会显示,但给定的样式不会出现

http://localhost:81/sitename/index.php/login

登录页面是我的主页,但是尝试登录时没有进入控制器功能。对此有什么解决方案吗?

【问题讨论】:

    标签: php .htaccess codeigniter codeigniter-3


    【解决方案1】:

    我刚刚通过添加 RewriteBase 并设置短打开标记来更改我的 .htaccess,如下所示,这通过正确运行 url 帮助了我。

    RewriteEngine On
    RewriteBase /sitename
    php_flag short_open_tag on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .* index.php/$0 [PT,L]
    

    【讨论】:

      【解决方案2】:

      如下更改您的 .htaccess:

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

      【讨论】:

      • 试过了还是一样
      【解决方案3】:

      尝试使用以下网址运行

      http://localhost:81/sitename/index.php/login
      

      【讨论】:

      • 运行,但我想从链接中删除 index.php,并且即使该链接显示来自控制器的主页登录身份验证功能也未被访问。
      • 能否请您检查在 Apache 中启用 mod_rewrite
      • 我在 .htaccess 和 den url 问题中添加了 RewriteBase /sitename 并启用了 php short tags,并且 php 错误得到了解决。
      猜你喜欢
      • 1970-01-01
      • 2019-04-22
      • 2012-09-15
      • 2018-10-09
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      相关资源
      最近更新 更多