Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Вариант 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'] . "/";

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

Я бы сохранил два набора кода и обрабатывал принудительное перенаправление на HTTPS-страницы с помощью hook_ 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()
                                );

Ответ 5

Я могу легко определить только:

$config['base_url'] = '';

CI get base_url automaticaly = D

Ответ 6

Я решил проблему с помощью 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

Ответ 7

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


btw, это основано на ответе skyler, перед которым было.

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

Ответ 8

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

Ответ 9

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

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

в config.php вместо

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

ставить;

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

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