如何为HTTPS(SSL)配置Codeigniter?

时间:2016-01-25 10:30:52

标签: php apache .htaccess codeigniter ssl

我有一个Codeigniter应用程序,它是在普通的http上开发和测试的。现在,Apache服务器的配置方式使所有页面都存储在启用了SSL的单个文件夹中。 SSL证书已到位。当我使用“https://www”浏览网站时,它会重定向到“http://www”。

注意:我不需要使用SSL加载特定页面。我只需要将所有页面显示为HTTPS

我尝试过Stack Overflow上建议的解决方案,包括:

  1. 修改.htaccess文件以强制HTTPS
  2. 设置$config['base_url'] = "https://www.yoursite.com/";
  3. 当我同时尝试上述方法时,Firefox发出以下错误:

      

    页面未正确重定向。 Firefox检测到服务器正在以永远无法完成的方式重定向此地址的请求。

    许多Stack Overflow贡献者建议这只应由Apache处理。这对我来说很有意义,但是通过.htaccess强制HTTPS会产生同样的错误。

    有没有一个简单的方法可以在没有钩子和SSL助手等的情况下做到这一点?

5 个答案:

答案 0 :(得分:0)

这个答案有点(阅读:很多),但你可以使用我{5}前所做的hook,它会重定向到你的HTTPS网站并设置一些标题。

我将它与此.htaccess文件一起使用:

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

答案 1 :(得分:0)

第1步

设置$config['base_url'] = "https://www.yoursite.com/";

第2步

使用和编辑此.htaccess文件。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

答案 2 :(得分:0)

很容易,

转到applicaton / config.php并插入以下代码:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$base  = "https://".$_SERVER['HTTP_HOST']; // HERE THE CORRECT CODE
$base .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
$config['base_url'] = $base;

请参阅图片上的第19行。

10k

Check it out

答案 3 :(得分:0)

步骤1:application / hooks / ssl.php

function force_ssl()
{
    $CI =& get_instance();
    $CI->config->config['base_url'] = str_replace('http://', 'https://', $CI->config->config['base_url']);
    if ($_SERVER['SERVER_PORT'] != 443) redirect($CI->uri->uri_string());
}

第2步:application / configs / hooks.php

$hook['post_controller_constructor'][] = array(
                                'function' => 'force_ssl',
                                'filename' => 'ssl.php',
                                'filepath' => 'hooks'
                                );

第3步:application / config / config.php

$config['enable_hooks'] = TRUE;

htaccess的更改:

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://example.com/$1 [R,L]

要在您的Apache服务器上安装的“ mod_rewrite”模块

最终:重新启动Apache服务器。

答案 4 :(得分:0)

CI_app\application\config\config.php

2

.htaccess

$base_url = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http");
$base_url .= "://". @$_SERVER['HTTP_HOST'];
$base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);

$config['base_url'] = $base_url;