HMVC codeigniter适用于本地服务器,但不适用于Web服务器

时间:2014-02-03 12:37:43

标签: php .htaccess codeigniter-2 hmvc codeigniter-hmvc

这是杀了我

我有什么? CI版本:2.1.4 模块化扩展 - HMVC by wiredesignz 一个基本的codeigniter(hmvc)项目,它在本地服务器(mamp)中使用php 5.5.3设置正常工作

我的问题 在我将项目移动到公共Web服务器后,我更改了以下内容。 --application /配置/ config.php中

$ config ['base_url'] ='http://example.com/';

- 应用/配置/ database.php中

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'newdbusername';
$db['default']['password'] = 'newdbpassword';
$db['default']['database'] = 'newdbname'; 

- 的public_html / htaccess的

RewriteEngine On
RewriteBase /

#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#'system' can be replaced if you have renamed your system folder.
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

#When your application folder isn't in the system folder
#This snippet prevents user access to the application folder
#Submitted by: Fabdrol
#Rename 'application' to your applications folder name.
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

#Checks to 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]    
# If we don't have mod_rewrite installed, all 404's 
# can be sent to index.php, and everything works as normal. 
# Submitted by: ElliotHaughin

ErrorDocument 404 /index.php

因为我的索引页面将是'home'模块的索引函数,所以我没有触及application / config文件夹中的routes.php文件。下面是routes.php的设置

$route['default_controller'] = "home";
$route['404_override'] = ''; 

问题 每当尝试访问http://example.com/时,我都会收到以下消息

找不到404页面 找不到您请求的页面。

如果我尝试使用example.com/home,我会得到相同的消息 但是example.com/welcome仍欢迎使用codeigniter页面

什么东西!!! ??? 为什么我无法从模块访问我的任何页面? 我错过了什么? 是其他人得到这个问题??

ps:如果有帮助,我的cpanel有php 5.3.27

更新:: 下面是我的默认控制器的索引函数

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Home extends MX_Controller
{

function __construct() {
parent::__construct();
}
function index()
{
    $this->load->library('recaptcha');
    $data['recaptcha_html'] = $this->recaptcha->recaptcha_get_html();
    $data['view_file'] = "checkmember"; 
    $this->load->module('templates');
    $this->templates->checkinfo();
}

============

更新2

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {

    /**
     * Index Page for this controller.
     *
     * Maps to the following URL
     *      http://example.com/index.php/welcome
     *  - or -  
     *      http://example.com/index.php/welcome/index
     *  - or -
     * Since this controller is set as the default controller in 
     * config/routes.php, it's displayed at http://example.com/
     *
     * So any other public methods not prefixed with an underscore will
     * map to /index.php/welcome/<method_name>
     * @see http://codeigniter.com/user_guide/general/urls.html
     */
    public function index()
    {
        $this->load->view('welcome_message');
    }
}

/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */

4 个答案:

答案 0 :(得分:7)

我认为问题不在于HMVC,而在于codeigniter 3.0版。说到unix(在我的服务器上运行的操作系统),它区分大小写。因此,当我尝试访问控制器时,由于区分大小写而且每次都会弹出404,因此无法找到该文件。

我以前的文件夹结构是这样的:

-application
-->modules
--->users
---->controllers
----->users.php

我获得404的链接是www.example.com/users/login

其中&#34;用户&#34;链接中的控制器名称是&#34;控制器&#34; &#34; modules&#34;下的文件夹我的案例中的文件夹名为users.php和&#34;登录&#34;是控制器内部的功能。

我所要做的就是更改模块和控制器名称的第一个字母的大小写。现在我的目录看起来像

-application
-->modules
--->Users
---->controllers
----->Users.php

注意:大写&#34; U&#34;在用户模块和用户控制器中。

我用来访问用户控制器的网址是:www.example.com/Users/login

我很高兴。

答案 1 :(得分:1)

最后问题解决了。 这是我在modules文件夹中的文件夹结构。

- 模块/

- - - - /家

-------- /控制器---&GT; home.php

-------- /模型---&GT; mdl_home.php

-------- /浏览次数---&GT; viewfile.php

我所要做的就是更改“控制器”,“模型”和“视图”文件夹的大小写,然后我重新开始营业。

现在文件夹结构就像这样,它的工作正常

- 模块/

- - - - /家

-------- /控制器---&GT; home.php

-------- /模型---&GT; mdl_home.php

-------- /视图---&GT; viewfile.php

与Ashish

答案 2 :(得分:1)

我遇到了同样的问题。当我重命名文件夹&#34;控制器&#34;和#34;意见&#34;小写,它的工作原理。 Linux debian。

enter image description here

答案 3 :(得分:0)

我解决了我的问题AS跟随目录和文件结构 它的工作正常。在服务器端类名和文件名应以大写字母开头,如下所示

def send_email(email, file)
  @email = email
  attachments['document.docx'] = File.read(file.path)
  mail(from: @email, to: "aa@gmail.com", subject: "Document attachment")
end