it-swarm.com.ru

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

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

20
ammonkc

Есть несколько способов справиться с этим. 

Опция 1:

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

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

или же

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

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

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

Вариант 2:

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

/system/application/config/config.php, установите для своей страницы:

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

Другие опции

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

$config['base_url'] = “http://” . $_SERVER['http_Host'] . “/”;
17
randomx

В application/config/config.php установите base_url в:

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

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

11
skyler

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

$protocol = ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) ? 'https' : 'http';
$config['base_url'] = $protocol.'://www.yoursite.com';
6
Code Prank

Я бы поддерживал два набора кода и обрабатывал принудительное перенаправление на страницы 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
NexusRex

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

$config['base_url'] = '';

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

2
Jonas WebDev

решение, которое пришло мне в голову, это использовать 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
Nassim

Я решил проблему с в 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
Gustavo Coelho

Это то, что сработало для меня . На нашем сервере есть $ _SERVER ['SERVER_PORT'] и $ _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
fedmich

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

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

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

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

положил;

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

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

0
2114L3