【问题标题】:CI new default controller not workingCI 新的默认控制器不起作用
【发布时间】:2015-04-02 19:34:52
【问题描述】:

CI 3.0 有问题 如果我将默认控制器留在 routes.php 文件“欢迎”中,一切正常。 但是如果我改变它,即“主要”CI 开始抛出 404 错误 第一步的主控制器与 Welcome 相同。我只是复制文件。重命名,更改类名(当然),并在index() 加载视图。 有什么建议吗?

我也忘了告诉 在 wamp localhost 上一切正常.. 但在服务器中不是.. :/

还有一件事... 即,如果我尝试访问 mydomain.com/welcome - 工作, 如果我尝试去 mydomain.com/main - 不是。 即使我将路由默认控制器改回欢迎

我的 main.php 文件:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Main extends CI_Controller {
    function index(){
        $this->load->view('welcome_message');
    }
}

我的 routes.php 文件:

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

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

【问题讨论】:

  • 我想你忘了把类名改成Main extends CI_controller或文件名main.php。用问题写你的主控制器。
  • 你能提供你的控制器和路由文件的代码吗?
  • 很遗憾,但我没有忘记更改类名.. :/ 正如我所说的,这对我来说很奇怪,因为在我的本地主机中一切正常.. :/ 但后来我将所有文件复制到服务器......它不工作......除非我把欢迎作为默认控制器在 routes.php
  • 控制器的文件名必须以大写字母开头。在您的情况下,Main.php。 codeigniter.com/userguide3/changelog.html:«更改了文件命名约定(类文件名现在必须是 Ucfirst,其他所有内容都必须小写)。 »
  • 天啊!! :// 谢谢!!! :)) 我习惯了文件名中的简单小写字母,我没有尝试过.. :) 非常感谢! :)

标签: php codeigniter codeigniter-3


【解决方案1】:

正如 cmets 中所说:您的控制器的文件名必须以大写字母开头。在您的情况下,Main.php。 见http://codeigniter.com/userguide3/changelog.html

«更改了文件命名约定(类文件名现在必须是 Ucfirst,其他所有内容都必须小写)。 »

【讨论】:

    【解决方案2】:

    你只需要在application/config/routes.php中设置你的默认控制器就好了

    $route['default_controller'] = $this->set_directory('front/home/').'home/index';
    

    对于 Ci 3.x

    【讨论】:

    • 你是救世主。当默认控制器位于文件夹中时,除了您的解决方案之外,其他解决方案均无效。谢谢
    • 你拯救了我的一天
    【解决方案3】:

    我遇到了这个问题。 我修复了它只是替换了路径。 如果你想使用 CI,这里的“site”文件夹是默认的,你必须将所有代码存储到“site”文件夹中。如果您没有使用站点文件夹进行安装,它将不适用于多控制器设置。 因此,您将默认控制器视为可行的,而其他控制器则出现 404。

    更改根目录中的 .htacess 文件。

    <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteBase /
    
            # Removes index.php from ExpressionEngine URLs
            RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
            RewriteCond %{REQUEST_URI} !/system/.* [NC]
            RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
    
            # Directs all EE web requests through the site index file
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
           # RewriteRule ^(.*)$ /site/index.php/$1 [L]
            RewriteRule ^(.*)$ /codeig/index.php/$1 [L]
    </IfModule>
    

    你可以看到上面有
    RewriteRule ^(.*)$ /codeig/index.php/$1 [L] 更改了“codeig”根文件夹的行。

    【讨论】:

      【解决方案4】:

      尝试将function index() 更改为Public。 如果这不起作用,请尝试添加 URL:domain.com/index.php/main 看看会发生什么。有时您需要在另一台服务器中使用 .htaccess 来删除 index.php

      【讨论】:

        【解决方案5】:

        在 Codeigniter 3 中,他们添加了额外的代码来强制文件名以大写字母开头。这是对此的修复。

        system/core/Router.php换行(关于303

        if ( ! file_exists(APPPATH.'controllers/'.$this->directory.ucfirst($class).'.php'))
        

        if ( ! file_exists(APPPATH.'controllers/'.$class.'.php'))
        

        我还必须删除 CodeIgniter.phpLoader.php 中的内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-06
          • 1970-01-01
          • 1970-01-01
          • 2016-02-13
          相关资源
          最近更新 更多