【问题标题】:In CodeIgniter, default controller is always loaded在 CodeIgniter 中,总是加载默认控制器
【发布时间】:2011-04-27 05:53:33
【问题描述】:

我正在尝试将我的 CI 1.7.2 应用程序迁移到 2.0.2。我已经到了可以正确加载默认控制器和页面的地步。耶!

但是,默认控制器是所有已加载的。示例:

myapp/ -> loads default controller (one)
myapp/one -> loads default controller (one)
myapp/two -> loads default controller (one)
myapp/three -> loads default controller (one)

我的.htaccess 是:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (.*) index.php/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule> 

我的config.php 是:

$config['base_url'] = 'http://localhost/myapp/branches/Source%20Code/';
$config['index_page']     = '';
$config['uri_protocol']   = 'QUERY_STRING'; 

顺便说一句,我已经尝试了URI PROTOCOL 的所有其他可能值,他们给了我“The page you requested was not found.”

最后,我的routes.php 是:

$route['default_controller'] = "one"; 

我还尝试将 default_controller 更改为“two”,它正确加载了“two”控制器。但是当 default_controller 为“one”并且我在地址栏中输入“myapp/two”时,它仍然加载“one”

我错过了什么? :)

【问题讨论】:

  • 重要问题:到目前为止,您是否关注 all upgrade steps?这个问题听起来有点熟悉,我认为使用 Codeigniter 很简单......
  • 根据这个帖子codeigniter.com/forums/viewthread/187501,在官方论坛,你已经解决了吗?
  • @Repox:是的,但解决方案与我希望的不同。我不习惯使用 QUERY_STRING。我正在寻找类似于下面 tgriesser 的答案。
  • 你为什么对此感到“不舒服”?这似乎不合逻辑。

标签: php codeigniter


【解决方案1】:

听起来像是 htaccess 问题。尝试将您的 mod 重写更改为:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /myapp/index.php/$1 [L]
</IfModule>

然后将$config['uri_protocol'] 更改为AUTO

【讨论】:

  • 谢谢,但这并没有解决问题。实际上,为了简单起见,我在这个问题中更改了 base_url。但实际的 base_url 确实是现在的样子,上面(已编辑)。所以我尝试了你的建议,但没有奏效。我也试过RewriteRule ^(.*)$ /myapp/branches/Source%20Code/index.php/$1 [L],但还是不行。还有其他想法吗? :)
  • 确定是否是 htaccess 问题的最佳方法是将 index_page 改回 index.php 并查看控制器是否正确加载。如果他们这样做,那么它就是 htaccess,如果他们不这样做,那么它就是你的 PHP 中的东西。
【解决方案2】:

我认为 uri_protocol => 'PATH_INFO' 不受支持

所以,尝试改变

$config['uri_protocol'] = 'QUERY_STRING'; // application/config/config.php

那么, 在您的 .htaccess 中更改

重写规则 (.*) index.php/$1 [L]

RewriteRule ^(.*)$ index.php?$1 [L]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    相关资源
    最近更新 更多