【问题标题】:CodeIgniter Setup QuestionCodeIgniter 设置问题
【发布时间】:2011-08-27 10:33:35
【问题描述】:

我正在尝试让此 URL 用于安装 codeigniter,今天刚刚安装了最新版本 (2.0.2):

http://mydomain.com/pete/ci_test/accounts

所以我在 routes.php 中将我的默认控制器设置为 test.php,在我的控制器 test.php 中,我有以下代码:

class test extends CI_Controller {

public function index() {
    $this->load->view('test');
}

public function accounts() {
    $this->load->view('accounts');
}
}

然后我的视图中有一个 test.php 和一个 accounts.php,当我转到 http://mydomain.com/pete/ci_test/ 时它会加载 test.php 视图

但是当我转到http://mydomain.com/pete/ci_test/accounts 时,它给了我一个 404。我一直在阅读入门,它说“默认情况下 CodeIgniter 使用基于段的方法”,然后给出了一个类似于我的示例正在做。但后来我进一步阅读它说:“默认情况下,index.php 文件将包含在您的 URL 中”。所以我将此添加到我的 htaccess 文件中(位于 mydomain.com/pete/ci_test/.htaccess):

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

我确保模块在 httpd.conf 中加载。它仍然没有进入我的 accounts.php 视图。我也试过:

http://mydomain.com/pete/ci_test/index.php/accounts

但是另一个 404,我做错了什么?任何建议都会有所帮助,谢谢!

【问题讨论】:

    标签: .htaccess codeigniter


    【解决方案1】:

    onteria_ 是正确的,你的控制器应该是大写的。这不是要求,而是“最佳实践”。

    但是,我认为您的控制器的命名与子文件夹的名称之间的区别让人们望而却步。看起来您的安装位于名为 ci_test 的文件夹中。在这种情况下,要访问它,URL 应该是

    http://mydomain.com/pete/ci_test/test/accounts

    http://mydomain.com/pete/ci_test/index.php/test/accounts

    【讨论】:

    • 控制器大小写应该没有区别。至少它不适合我,据我所知 PHP 对类或函数命名不区分大小写......如果问题是小写,为什么他的默认控制器会工作?
    • 我应该措辞更好 - 这是“最佳实践”而不是要求。编辑使其更清晰。
    • 我只是想向 OP(以及可能遇到此问题的任何其他人)表明这不是他的问题,仅此而已。特别是因为 2/4 的答案最初表明控制器名称大小写是潜在的问题。
    【解决方案2】:

    你的控制器应该是大写的类名:

    class Test extends CI_Controller {
    

    就访问它而言,网址应该是:

    编辑修复了我注意到的子文件夹

    http://mydomain.com/pete/ci_test/test/accounts

    http://mydomain.com/pete/ci_test/index.php/test/accounts

    【讨论】:

    • @Pete 他们应该这样做,除非您的 codeigniter 安装不在 /pete/ 中。 CI_Controller 也看起来像旧版本。你用的是什么版本?最新的扩展了Controller
    • 他说他使用的是 2.0.2,它确实使用 CI_Controller 而不是旧的 Controller。他的安装目录是pete/ci_test,大写/小写不应该有任何区别——它更像是一种风格指南。
    • @Wesley 好的,现在看看。我还说“应该”作为建议,而不是“需要”,否则我会向你扔很多小枕头。好吧,我以为他的文件夹是 /pete/ 而不是 /pete/ci_test。已更新。
    【解决方案3】:

    默认控制器是在不存在 url 段时加载的 - 就是这样。

    如果您希望/accounts 加载test 控制器和accounts 方法,则必须像这样使用route

    $route['accounts'] = 'test/accounts';
    

    否则,您必须拥有帐户控制器或通过 /test/accounts/ 访问它

    【讨论】:

    • 我想我现在明白了,我已经设置了第二个控制器来加载帐户视图。 mydomain/pete/ci_test/index.php/accounts 现在加载帐户视图,我想摆脱 index.php,但我现在可以使用它,谢谢!
    • 仅供参考 Pete,前导大写或全小写类名不会破坏您的代码,但如前所述 - 最好遵守建议的命名约定。
    【解决方案4】:

    我遇到了同样的问题,所以我环顾四周。您应该使用此 .htaccess 内容。它对我有用。

    Options +FollowSymLinks
    Options -Indexes
    DirectoryIndex index.php
    RewriteEngine on
    RewriteCond $1 !^(index\.php|resources|images|css|js|robots\.txt|favicon\.ico)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
    

    【讨论】:

      猜你喜欢
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      相关资源
      最近更新 更多