我遇到了404错误消息的类似问题。 我正在使用CI 2.0.2,我有一个基本的共享主机1and1,我的.htaccess位于我的网站根目录(/mywebsite/.htaccess)目录,它看起来像这样
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 index.php
</IfModule>
在我的config.php文件中,我有以下内容:
<?php
$config['base_url'] = 'http://mywebsite.com';
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';
我做什么并不重要我一直得到404页面未找到错误:http://d.pr/F2KR
我花了几个小时寻找这个问题的解决方案并且无法修复它。
非常感谢您对此问题的任何建议,提示或实际答案。
更新1: 我调用了1和1,他们告诉我,它必须是index.php的问题,因为404错误消息是由CodeIgniter而不是服务器生成的。我应该关注其他配置值吗?
更新2: 我发现有一个区分大小写的问题(这很奇怪,因为localhost和server分别是UNIX / LINUX),如果控制器类叫做Login,那么路径需要是mysite.com/Login/它不能是mysite的.com /登录/。我仍然不确定如何解决这个问题,我不想重写一堆路径。
更新3(已解决):如更新2所述,问题不是.htaccess,而是我的模型和控制器的命名方案,更具体地说是文件名。显然在我的Mac(开发机器)上我可以有名为User.php或Login.php的模型,如果我在URL中使用大写或小写,则没有区别,但是一旦我将代码上传到1and1,我就会不断获得CI“ 404 not found ”错误消息。我对该问题的特殊解决方案是将所有模型和控制器文件名更改为小写,如此帖http://codeigniter.com/forums/viewthread/129013/#636849所示。
答案 0 :(得分:2)
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
尝试将第一个<if>
修改为上面的代码,适用于我的codeigniter设置。
不确定AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php
...
答案 1 :(得分:1)
我同意Chris的意见,为了确保您启用了mod_rewrite,您可以尝试更改404页面:
<IfModule !mod_rewrite.c>
ErrorDocument 404 index.php
</IfModule>
到虚拟页面之类的其他东西
<IfModule !mod_rewrite.c>
ErrorDocument 404 my_dummy_page.html
</IfModule>
如果您开始使用新的404虚拟页面,那是因为您没有启用mod_rewrite。
答案 2 :(得分:0)
我在我的1and1上使用这个htaccess,我的CI2运行正常。它位于CI基础文件夹中。 还要确保.htaccess名称中有。(点),通常windows会删除该点。
Options -Indexes
DirectoryIndex index.php
AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^example\.in
RewriteRule (.*) http://www.example.in/$1 [R=301,L]