一个codeigniter应用程序文件夹运行两个具有不同域的网站

时间:2014-12-19 07:57:36

标签: codeigniter routes

我可以使用一个codeigniter框架目录来创建多个应用程序吗?

我有两个带有一个CodeIgniter应用程序的网站,我使用一个数据库用于网站,系统文件夹,配置,视图,控制器等也是相同的。

主网站工作正常,所有链接都正常工作,另一个网站只有主页正常工作,其余链接无效,当我打开另一个链接时发生错误:"无法加载您的默认控制器。请确保Routes.php文件中指定的控制器有效。" codeigniter的版本是2.2.0,请帮忙。

提前致谢

2 个答案:

答案 0 :(得分:1)

试试这个:

例如: - subdomain1.hostname.com - subdomain2.hostname.com

然后在我的前面索引:

// Host address
$host = $_SERVER['HTTP_HOST'];
$SERVER_NAME = $_SERVER['SERVER_NAME'];
define('HOST', $SERVER_NAME);

// Extract eventual subdomain
$host3 = strrpos($host, '.');
$host2 = substr($host, 0, $host3);
$host1 = strrpos($host2, '.');
$subdomain = substr($host, 0, $host1);

if($host == 'localhost') {
    define('HOST_TYPE', 'localhost');
    define('SUBDOMAIN', FALSE);
} else {
    if($subdomain !== 'www' && $subdomain !== '') {
        define('HOST_TYPE', 'subdomain');
        define('SUBDOMAIN', $subdomain);
    } else {
        define('HOST_TYPE', 'site');
        define('SUBDOMAIN', FALSE);
    }
}

在我的config.php配置中:

switch (HOST_TYPE) {
    case 'subdomain':
        $config['base_url'] = 'http://'.SUBDOMAIN.'.hostname.com/';
        break;
    case 'localhost':
        $config['base_url'] = 'http://localhost/devpage/';
        break;
    default:
        //$config['base_url']   = 'http://mainpage.com/';
        break;
}

在我的database.php配置中:

...
$db['default']['hostname'] = 'localhost';
switch (HOST_TYPE) {
    case 'subdomain':

        $username;
        $password;
        $con=mysqli_connect("localhost","username_db","password_db","name_db");
        $query = "SELECT * FROM subdomain_table WHERE subdomain_name = '".SUBDOMAIN."';" or die("Error in the consult.." . mysqli_error($con)); 
        if ($result = mysqli_query($con, $query)) {
            while($row = mysqli_fetch_array($result)) { 
              $username = $row["username"];
              $password = $row["password"];
            } 
        }else{
            mysqli_close($con);
            redirect('http://hostname.com'); //No sudomain found or error page
        }
        // Check connection
        if (mysqli_connect_errno()) {
                echo "Failed to connect to MySQL: " . mysqli_connect_error();
                mysqli_close($con);
        }else{

        }
        mysqli_close($con);
        $db['default']['database'] = 'db_prefix'.SUBDOMAIN;
        $db['default']['username'] = 'username_prefix'.$usuario;
        $db['default']['password'] = $password;
        break;
    case 'localhost':
        $db['default']['database'] = 'local_dev_db_name';
        $db['default']['username'] = 'some_username';
        $db['default']['password'] = 'some_password';
        break;
    default:
        redirect('http://mainpage.com');
        break;
}



$db['default']['dbdriver'] = 'mysql';
...

最后是constants.php config:

//this one resolve all your links!!!!!
switch (HOST_TYPE) {
    case 'subdomain':
        define('URL','http://'.SUBDOMAIN.'.hostname.com/');
        break;
    case 'localhost':
        define('URL','http://localhost/devpage/');
        break;
    default:
        define('URL','http://mainpage.com/');
        break;
}

我希望你觉得它很有用

答案 1 :(得分:0)

我认为@avenda的答案是有道理的,但正如你所提到的,只有1x数据库,那么就没有必要使用该代码了。

我认为您配置文件中最简单的解决方案就是:

$config['base_url'] = $_SERVER['HTTP_HOST'];

然后在你的路线文件中:

if ($_SERVER['HTTP_HOST'] == 'x'){
    $routes['default_controller'] = 'xController';
} elseif ($_SERVER['HTTP_HOST'] == 'y'){
    $routes['default_controller'] = 'yController';
}

没有对它进行测试,但是对项目有类似的需求,所以必须实现类似的东西。