【问题标题】:CodeIgniter and 1and1 - 404 error messageCodeIgniter 和 1and1 - 404 错误消息
【发布时间】:2011-10-14 15:58:55
【问题描述】:

我遇到了类似的 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: 我打电话给 1and1,他们告诉我这一定是 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 中所建议的那样。

【问题讨论】:

  • 您确定您的服务器上启用了 mod_rewrite 吗?这肯定会导致 404 错误。
  • @Onema 请仔细检查您的主机帐户:根据您提供的屏幕截图,我认为您可能拥有不支持 .htaccess 文件的 Windows 主机(IIS 服务器)(除非某些第 3 方模块是已安装,例如 Helicon ISAPI_Rewrite v3 或 Helicon Ape)。 P.S. 而且不需要在 &lt;IfModule mod_rewrite.c&gt; 中包含 AddTypeAddHandler 指令——这没有多大意义。
  • @Chris Schmitz:我会就此联系我的托管服务提供商。
  • @LazyOne 404 错误是由 CI 生成的,这就是它采用这种样式的原因。我是一台 linux 服务器,这是我从 phpinfo() 获得的信息:Linux infong 2.4 .. GNU/Linux。谢谢你们的cmets。

标签: .htaccess codeigniter http-status-code-404 shared-hosting


【解决方案1】:

我在我的 1and1 上使用这个 htaccess,我的 CI2 运行良好。它位于 CI 基本文件夹中。 还要确保您的 .htaccess 名称中有一个 .(dot),通常 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]

【讨论】:

    【解决方案2】:

    我同意克里斯,为确保您启用了 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。

    【讨论】:

    • 是的,它已启用。我认为这个问题与区分大小写的 uri 有关,所以如果控制器被称为用户,它看起来像这个 mysite.com/User/。我现在只关心 uri 不区分大小写
    【解决方案3】:
    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]
    

    尝试将第一个 &lt;if&gt; 修改为上面的代码,适用于我的 codeigniter 设置。

    不确定AddType x-mapp-php5 .php AddHandler x-mapp-php5 .php...

    【讨论】:

    • 我试过了,删除了 php5 行,没有用。这些真的不再重要了,因为您可以选择要在 1and1 中使用的“全局 php”。好建议。
    • 完美!它对我帮助很大,并且没有任何进一步的问题。
    猜你喜欢
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2014-11-10
    • 1970-01-01
    • 2014-12-23
    • 2014-03-25
    • 2013-05-23
    相关资源
    最近更新 更多