如何为 HTTPS (SSL) 配置 Codeigniter?

Posted

技术标签:

【中文标题】如何为 HTTPS (SSL) 配置 Codeigniter?【英文标题】:How to configure Codeigniter for HTTPS (SSL)? 【发布时间】:2016-05-01 15:06:58 【问题描述】:

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

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

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

    修改 .htaccess 文件以强制使用 HTTPS 设置$config['base_url'] = "https://www.yoursite.com/";

当我同时尝试上述方法时,Firefox 给出了以下错误:

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

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

有没有不使用钩子和 SSL 助手等的简单方法?

【问题讨论】:

建议的解决方案是正确的,但在我们看到您正在使用的代码之前,我们无法帮助您。使用您目前尝试过的.htaccess 代码更新问题。 .htaccess 代码如下: RewriteEngine On RewriteCond %HTTPS !=on RewriteRule ^ https://%HTTP_HOST%REQUEST_URI [L,R=301] 尝试使用RewriteCond %SERVER_PORT 80 而不是RewriteCond %HTTPS !=on 感谢您的建议,但使用该组合我仍然遇到相同的错误。 Firefox :“页面未正确重定向。Firefox 检测到服务器正在以永远不会完成的方式重定向对该地址的请求。” 重新加载apache服务器并再次检查。 【参考方案1】:

这个答案有点晚了(阅读:很多),但您可以使用我(5 分钟前)制作的 hook,它会重定向到您的 HTTPS 网站并设置一些标头。

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

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

【讨论】:

【参考方案2】:

很简单,

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

$base  = "https://".$_SERVER['HTTP_HOST']; // (For https)

参见图片上的第 19 行。

<?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;

【讨论】:

【参考方案3】:

第一步

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

第二步

使用和编辑这个 .htaccess 文件。

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

【讨论】:

【参考方案4】:

第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());

第二步:application/configs/hooks.php

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

第三步:application/config/config.php

$config['enable_hooks'] = TRUE;

htaccess 变化:

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

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

最后:重启 Apache 服务器。

【讨论】:

【参考方案5】:

CI_app\application\config\config.php

$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;

.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On

# Require HTTPS
RewriteCond %HTTPS !=on
RewriteRule (.*) https://%HTTP_HOST%REQUEST_URI [R,L]

# Removing the index.php file - https://codeigniter.com/userguide3
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

【讨论】:

以上是关于如何为 HTTPS (SSL) 配置 Codeigniter?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Heroku 应用程序配置带有 SSL 的 Amazon Route

如何为自己的WordPress站点安装SSL证书开启https访问

如何为我的 Elastic Beanstalk 单实例配置 SSL

如何为自己的WordPress站点安装SSL证书开启https访问

如何为自己的WordPress站点安装SSL证书开启https访问

如何为nginx配置https