Как я могу заставить CodeIgniter загружать определенные страницы с использованием SSL?


Как я могу заставить CodeIgniter загружать определенные страницы с использованием SSL? У меня есть сервер apache2/mode_ssl. mod_ssl использует другой корневой каталог документа, чем незащищенные страницы. Например, https (порт 443) будет обслуживать страницы из /var/www/ssl_html/, а http (порт 80) будет обслуживать страницы из /var/www/html/. Как бы мне заставить CodeIgniter хорошо работать с этой настройкой?

Author: Robert Harvey, 2009-10-01

10 answers

Существует несколько способов решения этой проблемы.

Вариант 1:

Я бы, вероятно, развернул код в обеих папках, а затем в файле:/system/application/config/config.php, установите свою страницу на:

$config['base_url'] = "http://www.yoursite.com/"; 

Или

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

Затем в папке виртуального хоста, отличной от ssl, настройте конфигурацию для перенаправления защищенных страниц по папкам на сайт SSL:

RedirectPermanent /sslfolder https://www.yoursite.com/sslfolder

Опция 2:

Отправляйте все на SSL и храните весь свой код в одном папка

/system/application/config/config.php, установите свою страницу на:

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

Другие Варианты

Есть еще несколько хакерских способов сделать это с перенаправлением заголовка() и т. Д. Но я не думаю, что вы хотите поддерживать разные базы кода для этой опции. Я не рекомендую этого, но вы могли бы сделать что-то вроде:

$config['base_url'] = “http://” . $_SERVER['http_host'] . “/”;
 17
Author: randy melder, 2009-09-30 20:51:09

В application/config/config.php, установите для base_url значение:

$config['base_url'] = ($_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http') . "://{$_SERVER['HTTP_HOST']}/";

Это позволит ему работать в любом домене, что удобно, если вы тестируете локально.

 11
Author: skyler, 2012-05-21 00:40:10

Я вставил следующие строки./application/config/config.php файл, и он отлично работает:

$protocol = ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) ? 'https' : 'http';
$config['base_url'] = $protocol.'://www.yoursite.com';
 6
Author: Code Prank, 2013-01-31 12:44:54

Я бы сохранил два набора кода и обработал принудительное перенаправление на страницы HTTPS с помощью крючка post_controller_constructor. Крючок будет вызываться перед отображением каждой страницы, чтобы проверить, следует ли перенаправлять посетителя на HTTPS в зависимости от его текущего местоположения на вашем сайте.

ШАГ 1

Создать файл: system/application/hooks/SecureAccount.php

<?php

class SecureAccount
{
    var $obj;

    //--------------------------------------------------
    //SecureAccount constructor
    function SecureAccount()
    {
        $this->obj =& get_instance();
    }

    //--------------------------------------------------
    //Redirect to https if in the account area without it
    function index()
    {
        if(empty($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] !== 'on')
        {
            $this->obj =& get_instance();
            $this->obj->load->helper(array('url', 'http'));

            $current = current_url();
            $current = parse_url($current);

            if((stripos($current['path'], "/account/") !== false))
            {
                $current['scheme'] = 'https';

                redirect(http_build_url('', $current), 'refresh');
            }
        }
    }
}
?>

ШАГ 2

Настройте путь в функции, для каких областей вашего сайта следует принудительно использовать HTTPS.

ШАГ 3

Добавьте следующее в system/application/config/hooks.php

/* Force HTTPS for account area */
$hook['post_controller_constructor'] = array(
                                'class'    => 'SecureAccount',
                                'function' => 'index',
                                'filename' => 'SecureAccount.php',
                                'filepath' => 'hooks',
                                'params'   => array()
                                );
 3
Author: NexusRex, 2012-01-26 13:18:45

Я могу легко, я только определяю:

$config['base_url'] = '';

CI автоматически получает base_url =D

 2
Author: Jonas WebDev, 2014-08-28 21:24:18

Я решил проблему с помощью config.php

$config['ssl_active'] = false;
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) {
    $config['ssl_active'] = true;
}

$config['base_url'] = ($config['ssl_active'] === true )?"https":"http" . $_SERVER['HTTP_HOST'];

Проблема с каталогом, вы можете использовать простую символьную ссылку ln -s

 0
Author: Gustavo Coelho, 2013-02-14 18:50:34

Это то, что сработало для меня. На нашем сервере есть $_SERVER['СЕРВЕР_ПОРТ'] и $_SERVER['HTTP_X_FORWARDED_PORT']

Сначала мы должны проверить, доступен ли $_SERVER['HTTP_X_FORWARDED_PORT'] и использовать его вместо $_SERVER['SERVER_PORT']

$config['base_url'] =
( ( ( empty($_SERVER['HTTP_X_FORWARDED_PORT']) ? $_SERVER['SERVER_PORT'] : $_SERVER['HTTP_X_FORWARDED_PORT'] ) == 443 ? 'https' : 'http') . "://" . $_SERVER['HTTP_HOST'] )
. str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']) ;

Протестировал это на нашем сервере Linux...


Кстати, это основано на ответе Скайлера, который был раньше.

$config['base_url'] = ($_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http') . "://{$_SERVER['HTTP_HOST']}/";
 0
Author: fedmich, 2013-10-22 07:04:15

Решение, которое пришло мне в голову, состоит в том, чтобы использовать str_replace() вот так

$base_url_str = base_url(); 
$secure_base_url = str_replace("http","https",$base_url_str );

Всякий раз, когда мне нужно безопасное место , я использую $secure_base_url вместо base_url(), так что пусть ваша base_url() является http://www.example.com тогда $secure_base_url будет https://www.example.com

 0
Author: Nassim, 2015-12-04 16:00:03

Другой вопрос похож на этот

Вы можете использовать URL-адрес, относящийся к протоколу, который сохранит связь в CI.

В вашем config.php вместо:

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

Положить;

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

Информация о ссылках, связанных с протоколом здесь.

 0
Author: 2114L3, 2017-05-23 12:01:48
 -1
Author: Owenskie, 2012-01-09 14:05:28