CodeIgniter 路由不起作用

Posted

技术标签:

【中文标题】CodeIgniter 路由不起作用【英文标题】:CodeIgniter routing not working 【发布时间】:2012-05-11 00:18:44 【问题描述】:

我的路由有问题。我的默认控制器(mysite.com)可以工作,但如果我尝试其他任何东西(例如 mysite.com/dashboard),它会转到基于 404 的服务器,而不是 CodeIgniter 的。这非常令人困惑,因为目前我的 routes.php 文件中只有 2 条路径。以下是我的 routes.php 文件中未注释的部分:

$route['404_override'] = '';

$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';

我的控制器位于 /application/controllers/pages.php。

我认为这不是 .htaccess 问题(因为它可以访问默认控制器),但这是我的 .htaccess 文件:

RewriteEngine On
RewriteCond $1 !^(index\.php|styles|scripts|images|robots\.txt)
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php?$1

#<IfModule mod_gzip.c>
#    mod_gzip_on       Yes
#    mod_gzip_dechunk  Yes
#    mod_gzip_item_include file      \.(html?|txt|css|js|php|pl)$
#    mod_gzip_item_include handler   ^cgi-script$
#    mod_gzip_item_include mime      ^text/.*
#    mod_gzip_item_include mime      ^application/x-javascript.*
#    mod_gzip_item_exclude mime      ^image/.*
#    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
#</IfModule>

编辑

这是页面控制器:

<?php

        class Pages extends CI_Controller 

        public function __construct()
               
                //Construct it's parent
            parent::__construct();

            //Check login
            //$this->load->model('pages_model');
        //$this->pages_model->getLoginStatus();

    


    public function view($page = 'dashboard')
    

        //If the file doesn't exist
        if ( ! file_exists('/var/www/vhosts/mysite/httpdocs/library/application/views/pages/'.$page.'.php'))
        
            // Whoops, we don't have a page for that!
            show_404();
               

        $data['title'] = ucfirst($page); // Capitalize the first letter

        //Load all necessary views
        $this->load->view('templates/head', $data); 
        $this->load->view('templates/header', $data);
        $this->load->view('pages/'.$page, $data);
        $this->load->view('templates/footer', $data);

    



?>

【问题讨论】:

愚蠢的问题,但是页面控制器确实存在方法“视图”? 是的,它是 pages 类中的唯一方法。我将在上面的代码中添加类。 是不是因为你已经将你的默认控制器声明为控制器/方法,而不仅仅是控制器?您应该在页面控制器中有一个 index() 方法,该方法将在没有额外段的情况下调用控制器时运行。 该代码直接取自codeigniter.com/user_guide/tutorial/static_pages.html,如果未指定值,则页面/视图中的变量默认为“仪表板”。 您确定您的服务器启用了 mod_rewrite 吗? 【参考方案1】:

刚才遇到了同样的问题,只需将 .htaccess 文件移动到工作目录的根目录 只需将其从应用程序文件夹中取出

【讨论】:

【参考方案2】:

这是我用于所有项目的 htaccess 文件:

Options -Indexes
Options +FollowSymLinks

# Set the default file for indexes
DirectoryIndex index.php

<IfModule mod_rewrite.c>

    # activate URL rewriting
    RewriteEngine on


    # do not rewrite links to the documentation, assets and public files
    RewriteCond $1 !^(images|assets|uploads|captcha)

    # do not rewrite for php files in the document root, robots.txt or the maintenance page
    RewriteCond $1 !^([^\..]+\.php|robots\.txt|maintenance\.html)

    # but rewrite everything else
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>

    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.

    ErrorDocument 404 index.php

</IfModule>  

然后确保在您的 config.php 文件中:

  $config['index_page'] = '';

【讨论】:

感谢@Laurencei,但我们现在知道服务器不允许重定向,但我会在解决这个问题时使用它!谢谢:) 你把那个 htaccess 文件放在哪里了? @劳伦斯 @gumuruh - 它进入您的公共 www 文件夹的基础。无论您的 index.php 文件在哪里。【参考方案3】:

最近我将服务器上的 PHP 版本从 7.0 升级到了 7.2。 但是,我的 CodeIgniter 路由在这样做后停止工作。所有请求都在浏览器控制台中返回 300 错误。

我通过切换回 PHP 7.0 解决了我的问题。

【讨论】:

以上是关于CodeIgniter 路由不起作用的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter 路由不起作用

具有两个段的CodeIgniter路由不起作用

路由配置在codeigniter中不起作用

CodeIgniter路由在子目录中不起作用

codeigniter 自定义 404 页面不起作用

URI 路由不起作用(多语言)