Nasıl SSL kullanarak CodeIgniter yük belirli sayfaları olabilir?

6 Cevap php

Nasıl SSL kullanarak CodeIgniter yük belirli sayfaları olabilir? Ben bir apache2 / mode_ssl sunucusu var. mod_ssl, güvenli olmayan sayfalar farklı bir belge kök kullanır. Örneğin, https (bağlantı noktası 443) /var/www/ssl_html/ üzerinden sayfalarını hizmet verecek ve http (port 80) /var/www/html/ üzerinden sayfaları hizmet vermektedir. Nasıl CodeIgniter bu kurulum ile güzel oynamak için almak istiyorsunuz?

6 Cevap

Bu mücadele için birkaç yolu vardır.

Option 1:

, / Sistem / application / config / config.php sayfanızı ayarlayın: Herhalde o dosyada, hem klasörlere dağıtmış kod olurdu:

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

veya

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

Sonra olmayan ssl VirtualHost klasöründe, SSL siteye klasöre göre korumalı sayfalara yönlendirmek için set config:

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

Option 2:

SSL için her şeyi göndermek ve bir klasördeki tüm kodunuzu tutmak

/ Sistem / application / config / config.php, sayfanızı ayarlayın:

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

Other Options

There are some mveyae hacky ways to do this with header() redirects, etc. but I don't think you want to maintain different code bases fveya this option. I don't recommend this but you could do something like:

$config['base_url'] = “http://” . $_SERVER['http_host'] . “/”;

Application / config / config.php, için base_url ayarlayın:

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

Bu yerel olarak test ederseniz uygun olduğu, herhangi bir etki üzerinde çalışmaya izin verir.

. I / application / config / config.php dosyasında aşağıdaki satırları koymak ve mükemmel çalışıyor:

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

Ben kodu iki set korumak ve bir post_controller_constructor kanca ile HTTPS sayfalara zorla yönlendirme kolu olacaktır. Her sayfası ziyaretçinin sitenizde mevcut yere göre HTTPS yönlendirilmesi gereken kontrol oluşturulmadan önce kanca çağrılır.

Adım 1

Dosya oluşturun: sistem / uygulama / kanca / 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');
            }
        }
    }
}
?>

ADIM 2

Sitenizin alanları HTTPS kullanmak zorunda olmalıdır hangi işlevinde yolunu özelleştirin.

ADIM 3

Sistem / uygulama / config / hooks.php için aşağıdaki ekle

/* Force HTTPS for account area */
$hook['post_controller_constructor'] = array(
                                'class'    => 'SecureAccount',
                                'function' => 'index',
                                'filename' => 'SecureAccount.php',
                                'filepath' => 'hooks',
                                'params'   => array()
                                );

Ben config.php ile sorun çözüldü

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

Dizini sorun, basit bir Simbolic bağlantı ln-s kullanabilirsiniz

This is what worked for me. Our server both have $_SERVER['SERVER_PORT'] and $_SERVER['HTTP_X_FORWARDED_PORT']

Biz $_SERVER['HTTP_X_FORWARDED_PORT'] varsa önce kontrol edin ve yerine $ _SERVER ['SERVER_PORT'] bu kullanmalısınız

$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']) ;

Bizim linux sunucuda bu test ...


btw, öyleydi önce hangi Skyler'ın cevap dayalı oluyor.

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