【问题标题】:CodeIgniter 2.1.4 - Routing don't work in serverCodeIgniter 2.1.4 - 路由在服务器中不起作用
【发布时间】:2014-07-25 09:03:50
【问题描述】:

我知道有很多这样的问题,但我应用了所有方法,但找不到正确的方法。

.htaccess 是:

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

<IfModule !mod_rewrite.c>
ErrorDocument 404 /NewWebsite/error.php
</IfModule>

在 config/config.php 中:

$config['base_url'] = 'https://mydomain.com/NewWebsite/';  
$config['index_page'] = ''; 
$config['uri_protocol'] = 'AUTO'; // I change it with REQUEST_URI and PATH_INFO but it don't work

在服务器中,mod_rewrite 已启用。

在 localhost 中,一切正常,但是当我将其上传到服务器时,只有索引有效(您看到的第一页)但是当我想在网络上“移动”时,出现 404 错误,找不到页面。

我将展示一个控制器以及如何调用它以更改为另一个视图。

class Products_controller extends CI_Controller {
    public function index()
    {
        $this->load->helper('url');
        $this->load->helper('html');
        $this->load->view('products.php');
    }
}

从索引,我称之为:

echo base_url('Products_controller/index');

echo base_url('Products'); // I have in config/routes.php ---> $route['Products'] = "Products_controller/index";

有人可以帮助我吗?我错过了什么?

谢谢。

【问题讨论】:

  • 您的托管服务提供商是什么? .htaccess 因托管服务提供商而异。
  • 我的托管服务提供商是 hostinet。我问他“mod_rewrite”,他们说它已激活,所以我可以使用它。
  • 试试我的回答,让我知道发生了什么。

标签: .htaccess codeigniter routing codeigniter-2 codeigniter-routing


【解决方案1】:

虽然 .htaccess 有时依赖于托管服务器,但您可以尝试并告诉我们。将您的 .htaccess 代码替换为以下代码:

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

就是这样。

【讨论】:

  • 我做到了,现在......当我尝试更改为调用我上面描述的控制器的视图时......我被重定向到“mydomain.com”。我的意思是,我正在尝试在“mydomain.com/NewWebsite”中安装 Codeigniter 的子目录
  • 我可以尝试将它安装在“mydomain.com”而不是“mydomain.com/NewWebsite”但是......这不是一回事吗?它必须是根目录?
  • 请简要描述您的情况,以便我完美回答您。
  • 我想在“mydomain.com/NewWebsite”上使用 CodeIgniter。所以在这个目录中,我放置了文件夹(应用程序、系统、assets-css、js、images、libraries-、.htaccess)。在 localhost 中完美运行,仅在服务器中我可以看到主索引。当我尝试从该页面“退出”时,我收到错误 404。向我询问您需要了解的任何额外信息...我不明白为什么它不起作用。
【解决方案2】:
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /NewWebsite/index.php [L] 
</IfModule>

以上应该可以工作 - 确保您的 .htaccess 在您要运行的子目录中。

还要确保基本目录中没有冲突的.htaccess 规则。

【讨论】:

  • 不工作。当我尝试离开 index.php 时,得到 404。我不明白,它必须工作。
  • 我尝试了一个新项目。如果没有 .htacess,您可以在 URL 中看到 index.php。只有两个控制器,两个页面和一个目标......从一个到另一个。它也失败了。会是什么?它是服务器?要不然是啥?这会让我发疯。我看到 URL 是这样的:www.domain.com/NewWebsite/ControllerName/FunctionName 但总是 404 错误,找不到页面。
【解决方案3】:

最后,我得到了关于这个话题的解决方案。这不是一个 .htaccess 问题,而是一个真正的转储和简单的错误。

在 CodeIgniter 中,控制器的名称和文件的名称 必须具有完全相同的名称。我一直在定义我的 第一个字母大写且不在文件中的控制器 姓名。现在一切正常!

谢谢你们。

【讨论】:

    最近更新 更多