web-dev-qa-db-fra.com

Comment puis-je avoir CodeIgniter charger des pages spécifiques en utilisant SSL?

Comment puis-je avoir CodeIgniter charger des pages spécifiques en utilisant SSL? J'ai un serveur Apache2/mode_ssl. mod_ssl utilise une racine de document différente de celle des pages non sécurisées. Par exemple, https (port 443) servirait des pages sur /var/www/ssl_html/ et http (port 80) servirait des pages sur /var/www/html/. Comment pourrais-je obtenir CodeIgniter pour jouer à Nice avec cette configuration?

20
ammonkc

Il y a peu de moyens de s'y attaquer. 

Option 1:

Le code devrait probablement être déployé dans les deux dossiers, puis dans le fichier: /system/application/config/config.php, définissez votre page sur:

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

ou

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

Ensuite, dans votre dossier VirtualHost non ssl, configurez votre configuration pour rediriger les pages protégées par dossier vers le site SSL:

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

Option 2:

Envoyez tout à SSL et conservez tout votre code dans un seul dossier

/system/application/config/config.php, configurez votre page pour:

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

Autres options

Il existe d'autres moyens plus astucieux de faire cela avec les redirections header (), etc., mais je ne pense pas que vous souhaitiez conserver différentes bases de code pour cette option. Je ne le recommande pas, mais vous pourriez faire quelque chose comme:

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

Dans application/config/config.php, définissez base_url sur:

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

Cela lui permettra de fonctionner sur n'importe quel domaine, ce qui est pratique si vous testez localement.

11
skyler

J'ai mis les lignes suivantes dans le fichier ./application/config/config.php et cela fonctionne parfaitement:

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

Je voudrais maintenir deux ensembles de code et gérer une redirection forcée vers des pages HTTPS avec un hook post_controller_constructor. Le hook sera appelé avant le rendu de chaque page pour vérifier si le visiteur doit être redirigé vers HTTPS en fonction de son emplacement actuel sur votre site.

ÉTAPE 1

Créer un fichier: 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');
            }
        }
    }
}
?>

ÉTAPE 2

Personnalisez le chemin dans la fonction pour laquelle les zones de votre site doivent être contraintes d'utiliser HTTPS.

ÉTAPE 3

Ajoutez les éléments suivants à 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

Je peux facilement, je ne définis que:

$config['base_url'] = '';

CI obtenir automatiquement base_url = D

2
Jonas WebDev

la solution qui m'est venue à l'esprit est d'utiliser str_replace () comme si 

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

chaque fois que j'ai besoin d'un emplacement sécurisé, j'utilise $ secure_base_url au lieu de base_url (), , alors disons que votre base_url () est http://www.example.com alors $ secure_base_url sera https://www.example.com

0
Nassim

J'ai résolu le problème avec in 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'];

Le problème d'annuaire, vous pouvez utiliser un simple lien simbolique ln -s

0
Gustavo Coelho

C'est ce qui a fonctionné pour moi. Notre serveur possède tous les deux $ _SERVER ['SERVER_PORT'] et $ _SERVER ['HTTP_X_FORWARDED_PORT']

Nous devrions vérifier d’abord si $ _SERVER ['HTTP_X_FORWARDED_PORT'] est disponible et l’utiliser au lieu de $ _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']) ;

testé cela sur notre serveur linux ...


en fait, c'est basé sur la réponse de Skyler avant qui était.

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

autre question est semblable à ceci

vous pouvez utiliser une URL relative au protocole qui conservera la persistance dans la liaison dans CI.

dans votre config.php au lieu de:

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

mettre;

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

informations sur les liens relatifs au protocole ici .

0
2114L3