【问题标题】:Codeigniter can only access default route controllerCodeigniter 只能访问默认路由控制器
【发布时间】:2012-12-28 11:31:38
【问题描述】:

我怀疑这可能是网络服务器配置发生了变化,我的托管服务提供商没有告诉任何人,但无论如何......

我有一个使用以下目录结构设置的 Codeigniter 实例:

/root
   /codeigniter
        /app
        /sys
   /www
        /sandbox
            /ci
                /js
                /css
                /img
                .htaccess
                index.php

因此在 index.php 中,我有以下变量:

$application_folder = '../../../codeigniter/app';
$system_path = '../../../codeigniter/sys';

这些是相对定义,因为它是共享托管服务提供商,但它似乎确实以这种方式工作,所以我认为这不是问题(在 WAMP 中,我明确定义了这些文件夹路径,例如 c:/ wamp/ci/应用程序)

在 config.php 中,我设置了以下变量:

$config['base_url'] = 'http://******.co.uk/sandbox/ci/';
...
$config['index_page'] = '';
...
$config['uri_protocol'] = 'AUTO';

我在 www/sandbox/ci 中的 .htaccess 文件设置如下:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

直到几天前,这一切都运行良好,但是,我在圣诞节前更换了相当多的文件,并且可能在没有意识到的情况下不小心覆盖了某些文件。此设置在我的 WAMP 服务器上运行良好,但在我的实时服务器上失败如果我尝试访问任何控制器中的任何功能,而不是在 routes.php 中定义的控制器。

我的 routes.php 看起来像这样:

$route['default_controller'] = "home_controller";
$route['404_override'] = '';

home_controller 看起来不错,但是如果我尝试执行登录(通过 POST 到 auth_controller/login 的表单处理)之类的操作,则会失败并返回 404。我在 home_controller 中没有任何其他功能。

将日志记录阈值设置为 4 并没有什么有趣的事情,ChromePHP 只是提示它找不到控制器的路径。

mod_rewrite 似乎正在工作,因为如果我将任何纯文本添加到 .htaccess 文件中,我会收到服务器错误 500,而且 index.php 重写正在工作。我也将 rewrite_short_tags 设置为 TRUE。

我已经尝试了 config.php 中的所有 uri_protocol 类型,但似乎没有任何区别,所以我觉得如果这是我做过的事情,我要么从 routes.php 中遗漏了一些东西,要么我的 .htaccess 中缺少一些东西。

任何想法将不胜感激。就像我说的,整个设置在我的 WAMP 服务器上运行没有问题。

【问题讨论】:

    标签: php apache .htaccess codeigniter


    【解决方案1】:

    我认为问题出在您的 htaccess 中。试一下这个 htaccess..

    <IfModule mod_rewrite.c>
    
    RewriteEngine On
    
    # Set the rewritebase to your CI installation folder
    RewriteBase /sandbox/ci/
    
    
    # Send everything to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
    
    </IfModule> 
    

    希望对你有所帮助。

    【讨论】:

    • 您,先生,是人中的神。我记得不久前摆弄过 htaccess 文件,所以我一定在某个时候覆盖了 rewritebase 并将其复制回我的托管空间。非常感谢!
    • 不客气! WAMP 可能对 RewriteBase 很灵活,但我不确定.. 很久以前我使用过 WAMP。我希望有一天它会出现在 mac 上 :)
    • XAMPP 是 OS X 的 WAMP 的替代品。至于 RewriteBase,可能是我的 WAMP 实例对它感到满意,因为 index.php 存在于“默认”位置,即 (c:/ wamp/www/index.php),而在我的 Web 服务器上,它的目录结构低 2 级(/var/www/sandbox/ci/index.php)。不管怎样,我的世界一切都好起来了:)
    猜你喜欢
    • 1970-01-01
    • 2018-10-30
    • 2015-03-22
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 2017-01-19
    相关资源
    最近更新 更多