【发布时间】:2014-06-03 02:58:53
【问题描述】:
我是 CodeIgniter 的新手,根据标题,我在尝试为我的应用程序设置单个控制器时遇到了麻烦。这是一个非常简单的静态网站,有几个页面,比如“home”、“about”等等......
我的routes.php 文件中有这个:
$route['default_controller'] = "mycontroller";
$route['404_override'] = '';
$route['(:any)'] = "mycontroller/$1";
这在mycontroller.php 文件中:
// Home
public function index()
{
$data['page'] = 'home';
$this->load->view('template',$data);
}
// about
public function about()
{
$data['page'] = 'about';
$data['title'] = 'About Us';
$this->load->view('template',$data);
}
我在localhost环境下工作,CI项目在这个文件夹里:
http://localhost/local/project/ci-tbs/
我还在config.php 文件中为base_url 参数指定了它。
现在我期望将浏览器指向
http://localhost/local/project/ci-tbs/about
是找到“关于我们”页面,但我收到了 404 错误。指向基地址正确地给了我“主页”页面。
我做错了什么?
是否感觉使用单个控制器而不是每页 1 个?我会以快速的方式完全解决这个问题,但我仍然对我无法理解我做错了什么以及为什么它不起作用这一事实感到非常困惑。我想在一个控制器中简单地设置所有内容,每页一种方法。
我已经在 SO 中看到过这里提出的这个主题,比如在路由 $route['(.*)'] = "mycontroller/$1"; 中使用正则表达式,但是对于我的情况没有什么真正有效的,我认为这是非常基本的(所以基本我确定我的错误是这样的太尴尬了:P)。
附加信息:
我在文件夹中有一个 .htaccess 文件,按原样从 Html5 Boilerplate 中选择,尝试使用和不使用它,但 404 始终存在。我使用 XAMPP 作为本地环境。
求答案
正如@Vincent Decaux 在回答中提到的,解决这个问题的方法是在 url 中添加 index.php,另一个有趣的部分是
创建您的 .htaccess 文件以“隐藏”index.php
通过这种方式,我解决了资产文件缺失的页面的另一个小问题,因此我在 .htaccess 文件中使用了以下规则,将所有请求重定向到 index.php 文件并排除资产文件夹中的文件和图像,以及此处建议的 robots.txt https://stackoverflow.com/a/11846150/1262357
RewriteEngine on
RewriteCond $1 !^(index\.php|assets|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
希望这可以帮助其他有同样问题的人!
【问题讨论】:
-
你是 apache 的 404 还是 ci 的 404?
-
但是他没有 htaccess 告诉将请求重定向到 index.php.. 所以,它一定是 apache 试图访问一些不存在的文件/目录。
-
它应该是 CI 404,但在来自 h5bp 的 .htacces 中有一个 404 的规则,
ErrorDocument 404 /404.html,我在文件夹中有一个 404.html 文件。 -
@VincentDecaux 成功了!奇怪的是,根据 CI 网站上的文档,它没有指定包含 index.php,也没有提到在 .htaccess 中包含 index.php IRC 的规则
标签: php .htaccess codeigniter controller