Codeigniter - 出现 404 Not Found 错误

Posted

技术标签:

【中文标题】Codeigniter - 出现 404 Not Found 错误【英文标题】:Codeigniter - getting 404 Not Found error 【发布时间】:2017-09-03 04:39:18 【问题描述】:

我们在 godaddy 有两个托管包。我们的实时网站使用以下 .htaccess 文件运行良好。无需在 url 中使用 index.php 即可访问网站。

RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php?/$1 [L] 

我们在同样由 godaddy 提供的其他主机上使用了相同的 htaccess 文件和相同的代码。我们只是想让生产和开发实例分开。但是在其他具有相同代码和 htaccess 文件的主机上,网站显示 404 page not found 错误,但网站在 url 中使用 index.php 可以正常工作。

我们在两台服务器上都有相同的 php 版本。只是想知道可能是什么问题?

【问题讨论】:

服务器上的操作系统是什么?是专用服务器吗?你用的是什么网络服务器? .htaccess 看起来不错。当不遵循 CI 控制器(和模型)的文件命名约定时,通常会发生 404。 CI 版本 => 3 尤其严重。如果您的开发机器是 WAMP(窗口上)堆栈并且您在实时服务器上有 apache,您可能会被愚弄。他们以不同的方式处理字符大小写。还要确保在 config.php 中正确设置了 base_url 如果你对 url example.com/index.php/your_contoller 使用这个结构会发生什么?如果找到该页面,则问题是.htacccess。否则,可能就是我在上一条评论中提到的。 你使用的是linux托管服务器还是windows? 两台服务器都是基于 linux 的。一个工作正常,但另一个工作不正常。我可以使用 url 中的 index.php 访问网站,但无法访问。我使用了相同的 htaccess 文件,除了 config.php 文件之外,一切都相同 【参考方案1】:

正如您在此处提到的,您的代码在 localhost 上运行良好,但是当您将其移动到实时服务器上时,它会导致 404 错误。您可能需要检查一些情况:

第 1 步:检查您的 Apache 配置中是否启用了 mod_rewrite

第 2 步: 按照@geordy 的建议删除 codeigniter 配置中的 index.php

您可以通过以下方式查看

<?php
echo 'Test'; die;
?>

在您的根 index.php 中。它确保您的所有请求都应通过此文件,否则 Codeigniter 框架将无法正常工作。

【讨论】:

【参考方案2】:

关注这个

在您的 public_html/Project 根目录中创建一个新的 .htaccess 文件

粘贴以下代码

RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|resources|robots\.txt|static) [NC]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/?$1 [L,QSA]

可选

如果您可以在 Linux 终端或 Putty 的命令行上使用命令 ssh username@ip_address SSH 进入服务器

username 是 GoDaddy 给您的,或者您可以使用 root

ip_address 将是您主机的公共 IP,您可以在主机面板中找到它

运行命令sudo a2dissite 000-default

该命令禁用处理请求的默认 apache 配置

祝你好运!

【讨论】:

【参考方案3】:

在 index.php 中你回显“test”并运行。然后你可以检查它是否被调用。 在配置文件中启用错误日志。 使您的 /application/logs 文件夹可写。 在/application/config/config.php 集合中。 $config['log_threshold'] = 4;

查看日志/application/logs文件夹

【讨论】:

【参考方案4】:

试试这个..它对我有用..

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]

【讨论】:

【参考方案5】:

尝试将所有控制器都小写。这为我解决了问题。

【讨论】:

【参考方案6】:

当我在 Godaddy 服务器上移动时,我遇到了类似的问题。这对我有用。

将此代码添加到您的 .htaccess 文件中。

<IfModule mod_rewrite.c>
    RewriteEngine On

   RewriteCond %REQUEST_FILENAME !-f
   RewriteCond %REQUEST_FILENAME !-d

   # Rewrite all other URLs to index.php/URL
   RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 

</IfModule>
<IfModule !mod_rewrite.c>
       ErrorDocument 404 index.php
</IfModule>

在配置文件中:

$config['base_url'] = 'domain.com';
$config['index.php'] = '';

Set AllowOverride to All 在你的 httpd.conf 中

在 /cache 文件夹上设置正确的权限,而不是仅仅使文件夹可写,您需要使其隐匿可写。

我希望它对你有用。

【讨论】:

【参考方案7】:

你可以使用它。这在godaddy托管中对我有用。

RewriteEngine On 
RewriteBase /
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*) index.php?/$1

【讨论】:

【参考方案8】:

当我将我的 100% 工作代码移动到专用的 Debian 服务器时,我也遇到了类似的问题。经过 3 小时的研究,我发现了 htaccess 文件不起作用的原因。您需要在 Apache 配置中允许覆盖 htaccess。

这里是步骤。

第 1 步:

在 htaccess 文件中添加这个

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %REQUEST_FILENAME !-f
    RewriteCond %REQUEST_FILENAME !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
</IfModule>

第 2 步:

删除 codeigniter 配置中的 index.php

$config['index_page'] = '';

第 3 步:

允许在 Apache 配置(命令)中覆盖 htaccess

sudo nano /etc/apache2/apache2.conf

并编辑文件并更改为

AllowOverride All

对于 www 文件夹

第 4 步:

重启 Apache(命令)

sudo /etc/init.d/apache2 restart

在对 apache2.conf 文件进行任何更改之前,请确保对该文件进行备份。如果您使用的是 Debian 服务器,则可以避免使用 sudo 命令。我相信您知道如何使用像 putty 这样的 ssh 客户端软件连接到您的服务器。如果此方法不适合您,请在下方评论。

【讨论】:

Codeigniter 3 版本最好不要将基本 url 留空。 @wolfgang1983 我更新了我的帖子。实际上,我的意思是从基本 URL 中删除 index.php 部分,但不幸的是,它会引起一些混乱。感谢您的建议。【参考方案9】:

我在服务器网络方面的知识有限,但这应该会给你一些想法。

首先,你必须知道.htacess 文件是什么。你可以在这里查看link

.htaccess 是一个配置文件,用于运行 Apache Web 服务器软件。当 .htaccess 文件放置在 依次“通过 Apache Web 服务器加载”的目录,然后 .htaccess 文件由 Apache Web 服务器检测并执行 软件。这些 .htaccess 文件可用于更改配置 Apache Web 服务器软件的启用/禁用附加 Apache Web 服务器软件必须具备的功能和特性 提供。这些设施包括基本的重定向功能,用于 例如,如果发生 404 文件未找到错误,或者更高级 内容密码保护或图片热链接等功能 预防。

基本上 .htaccess 允许您编辑 Apache Web 服务器 的配置。如果在 Apache 中启用了 mod_rewrite,您将获得使用 .htacess 的权限。我不会写 .htaccess 中的 4 个基本行在 codeigniter 中可以做什么,因为你可以在 google 中找到它。这个link 可以给你一些不错的基本信息。

现在主要问题是 .htaccess 在您的其他主机中不起作用。这是可能的,因为有几个原因:

    由于某种原因,您的 Apache Web 服务器中禁用了 mod_rewrite。如果您的主机是 VPS 或 DS,那么您可能还没有配置它。已经有人问如何启用 mod_rewrite,你可以去这个link。如果您使用共享主机,请让您的主机在您的主机中启用 mod.rewrite。您可以在link 之后检查您的主机是否启用了 mod.rewrite。或者您可以简单地检查&lt;?php phpinfo(); ?&gt; 并检查“加载的模块”是否存在 mod_rewrite。 image 中的示例。 您没有使用 Apache 作为 Web 服务器。还有其他 Web 服务器如 nginx 和 lighttpd。您应该询问您的服务器管理员您当前使用的是什么 Web 服务器。我没有任何使用 NGINX 和 lighttpd 的经验,所以我不能给你任何帮助。但据我所知,.htaccess 代码在 APACHE、NGINX 和 lighttpd 中是不同的。您可以尝试将 .htaccess apache 代码转换为 here 或 here 中的 nginx 代码。不幸的是,为了将 .htaccess 转换为 lighttpd,我找不到任何在线转换器,但有官方指南 here 和 here 好吧,为了完整的提示,我会写这个。您可能没有将 codeigniter 配置为不使用 index.php。在配置文件中,index_page 的配置为空。并给 Base_url 你的域名。 $config['base_url'] = "yourdomainname.com"; $config['index_page'] = '';

我希望这能消除您的 .htaccess 不起作用的困惑。

【讨论】:

以上是关于Codeigniter - 出现 404 Not Found 错误的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 404 Page Not Found 找不到您请求的页面

Codeigniter 分页链接转到 404 Page Not Found

CI ~ CodeIgniter在nginx下报错404 Not Found ,解决办法

CI ~ CodeIgniter在nginx下报错404 Not Found ,解决办法

Codeigniter分页链接转到404 Page Not Found

Ajax 响应调用,404 Not Found