【问题标题】:CodeIgniter route not workingCodeIgniter 路由不起作用
【发布时间】:2011-11-07 22:40:26
【问题描述】:

我的路由文件中有以下路由:

$route['default_controller'] = "main";
$route['404_override'] = '';
$route['testroute'] = "main";

如您所见,我想要的只是当有人访问 mydomain.com/testroute 时,它​​应该只是路由回默认控制器。但是,当我去那里时,我得到一个 404 错误。我写这条路线的方式有问题吗?

【问题讨论】:

  • 如果你去mydomain.com/index.php/tesroute会发生什么?
  • 现在我得到一个页面,上面写着“没有指定输入文件。”
  • 你的主控制器就是这样做的吗?好吧,无论如何,你确定你的mod_rewrite 工作正常/你的.htaccess 文件设置正确吗?
  • 我的主控制器做了它应该做的事情。如果我只是转到域的根目录,它就可以调用“主”控制器。我将对没有路由的传统控制器进行测试,看看会发生什么。
  • 原来我需要在 .htaccess 中更改这一行: RewriteRule ^(.*)$ /index.php/$1 [L] to RewriteRule ^(.*)$ /index.php? /$1 [L](在 index.php 之后添加问号)

标签: codeigniter routes


【解决方案1】:

您必须在您的应用中创建.htaccess 文件。

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

请将此代码粘贴到您的 .htaccess 文件中。

【讨论】:

  • 有同样的问题。你的回答有帮助。谢谢
  • 你拯救了我的夜晚!!!!您的回答帮助我的团队无需加班到午夜。
【解决方案2】:

LoneWolfPR 的评论一针见血,你使用的是 FastCGI,它需要不同的 htaccess。

你可以试试这个吗?

https://raw.github.com/pyrocms/pyrocms/develop/.htaccess

我很想建议我们将它添加到 CodeIgniter 2.1-dev 中,以保存这个问题每天出现 15 次。让我知道它是否有效。

【讨论】:

  • 这对我有用。请注意,示例中的链接正在更改,因为它们有许多分支。只需在main page 中找到它,并在 github url 前面加上“原始”子域。我将重写规则放在我的虚拟主机的<Directory> 中,并在 apache2.4 上使用 proxypass 到 php-fpm 对其进行了测试。我在最后使用了规则的“选项 1”+ !mod_php5 规则。
【解决方案3】:

听着,这是有史以来最愚蠢的答案,但这是我在类似情况下的经历——刚刚发生。我很无助,但它开始起作用了 - 方法如下。

我有一个控制器,调用者 ReadController.php(类被称为相同)。 路线是一样的:

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

使用www.martinjovanovic.com/DSi1.5-v01/index.php/ReadController/ 调用它 - 有效。 但是只用martinjovanovic.com/DSi1.5-v01/ 调用它根本行不通。

基本网址是我的域和文件夹的网址:www.martinjovanovic.com/DSi1.5-v01/

对 htaccess 没有任何更改,我将其保留为默认值(全部拒绝)。

  1. 我将默认控制器切换回welcome.php。
  2. 复制一份,命名为welcome2.php。相应地重命名了类。
  3. 将路线更改为welcome2。有效。相同的欢迎屏幕。
  4. 将welcome2.php 中的index() 更改为一些echo('something')。它奏效了。
  5. 将welcome2.php 重命名为read.php,进行相应的分类。在路线上改变了它。它奏效了。
  6. 将原始 ReadController.php 中的整个代码复制粘贴到 read.php 中。它奏效了。

就是这样。同样的事情开始起作用了。

原来的 ReadController.php 和新的 read.php 之间的唯一区别在于第一行。在我的新 read.php 中,我保留了旧 ReadController.php 中实际上缺少的第一行(我猜是我的开发人员省略了它):

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

这是在开始的 php 标记之后立即出现的。 那是唯一的区别。我不明白为什么它会产生如此大的不同。也许根本不是关于它的。尽管如此,它还是奏效了。

这个故事的寓意是:我从一开始就奏效的东西开始,然后慢慢地把它改成我需要的东西,直到它奏效......

【讨论】:

    猜你喜欢
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    相关资源
    最近更新 更多