Codeigniter - 获取404 Not Found错误

时间:2017-04-07 17:41:41

标签: php .htaccess codeigniter

我们在godaddy有两个主机套餐。我们的实时网站使用以下.htaccess文件正常工作。无需在url中使用index.php即可访问网站。

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

我们在godaddy的其他主机上使用了相同的htaccess文件和相同的代码。我们只是想让生产和开发实例分开。但在其他托管相同的代码和htaccess文件,网站显示404页面找不到错误,但网站与url中的index.php工作正常。

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

9 个答案:

答案 0 :(得分:10)

当我将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 config中的index.php

$config['index_page'] = '';

第3步:

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

sudo nano /etc/apache2/apache2.conf

并编辑文件&amp;改为

AllowOverride All

用于www文件夹

第4步:

重启Apache(命令)

sudo /etc/init.d/apache2 restart

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

答案 1 :(得分:2)

你可以用它。这适用于godaddy托管。

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

答案 2 :(得分:1)

当我在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'] = '';

httpd.conf中的Set AllowOverride to All

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

我希望它对你有用。

答案 3 :(得分:1)

在index.php中

你回声&#34;测试&#34;然后运行。然后你可以检查它是否被调用。 在配置文件中启用错误日志。 使您的/ application / logs文件夹可写。 在/application/config/config.php集中。 $config['log_threshold'] = 4;

检查日志/application/logs文件夹

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

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]

答案 6 :(得分:0)

我对服务器网络的了解有限,但这应该会给你一些想法。

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

  

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

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

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

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

答案 7 :(得分:0)

按照

进行操作
  • 在public_html / Project root中创建一个新的.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进入服务器

username是GoDaddy给你的那个,或者你可以使用root

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

运行命令sudo a2dissite 000-default

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

古德勒克!

答案 8 :(得分:0)

正如你在这里提到的,在localhost上你的代码工作正常但是当你将它移到实时服务器上时会导致404错误。您可能需要检查的情况很少:

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

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

您可以通过

进行检查
<?php
echo 'Test'; die;
?>

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