it-swarm.com.de

Wie kann ich CodeIgniter bestimmte Seiten mit SSL laden lassen?

Wie kann ich CodeIgniter bestimmte Seiten mit SSL laden lassen? Ich habe einen Apache2/mode_ssl Server. mod_ssl verwendet ein anderes Dokumentstammverzeichnis als nicht sichere Seiten. Zum Beispiel liefert https (Port 443) Seiten außerhalb von /var/www/ssl_html/ und http (Port 80) Seiten außerhalb von /var/www/html/. Wie würde ich CodeIgniter dazu bringen, mit diesem Setup Nice zu spielen?

20
ammonkc

Es gibt nur wenige Möglichkeiten, dies zu bewältigen. 

Option 1:

Ich hätte den Code wahrscheinlich in beiden Ordnern bereitgestellt und dann in der Datei /system/application/config/config.php Ihre Seite auf Folgendes gesetzt:

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

oder

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

Stellen Sie dann in Ihrem Nicht-SSL-VirtualHost-Ordner Ihre Konfiguration so ein, dass geschützte Seiten nach Ordner an die SSL-Site umgeleitet werden:

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

Option 2:

Senden Sie alles an SSL und speichern Sie Ihren gesamten Code in einem Ordner

Stellen Sie Ihre Seite in /system/application/config/config.php ein:

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

Andere Optionen

Es gibt einige weitere harte Methoden, um dies mit Header () - Weiterleitungen usw. zu tun. Ich empfehle das nicht, aber Sie könnten so etwas tun:

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

Setzen Sie in Anwendung/config/config.php base_url auf:

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

Dadurch kann es in jeder Domäne arbeiten, was praktisch ist, wenn Sie lokal testen.

11
skyler

Ich füge folgende Zeilen in die Datei ./application/config/config.php ein und es funktioniert einwandfrei:

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

Ich würde zwei Sätze des Codes beibehalten und eine erzwungene Weiterleitung zu HTTPS-Seiten mit einem post_controller_constructor-Hook behandeln. Der Hook wird aufgerufen, bevor jede Seite gerendert wird, um zu überprüfen, ob der Besucher auf der Grundlage des aktuellen Standorts auf Ihrer Website zu HTTPS umgeleitet werden soll.

SCHRITT 1

Erstellen Sie die Datei 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');
            }
        }
    }
}
?>

SCHRITT 2

Passen Sie den Pfad in der Funktion an, für den Bereiche Ihrer Site HTTPS verwenden müssen.

SCHRITT 3

Fügen Sie Folgendes zu system/application/config/hooks.php hinzu

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

Ich kann leicht, ich definiere nur:

$config['base_url'] = '';

CI get base_url automatisch = D

2
Jonas WebDev

die Lösung, die mir in den Sinn kam, ist, str_replace () so zu verwenden 

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

wann immer ich einen sicheren Ort brauche, verwende ich $ secure_base_url anstelle von base_url (), . Nehmen wir also an, dass base_url () http://www.example.com dann $ secure_base_url ist https://www.example.com

0
Nassim

Ich habe das Problem mit in config.php gelöst 

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

Beim Verzeichnisproblem können Sie einen einfachen simbolischen Link ln -s verwenden

0
Gustavo Coelho

Das hat bei mir funktioniert. Beide Server haben $ _SERVER ['SERVER_PORT'] und $ _SERVER ['HTTP_X_FORWARDED_PORT']

Wir sollten zuerst prüfen, ob $ _SERVER ['HTTP_X_FORWARDED_PORT'] verfügbar ist und dies anstelle von $ _SERVER ['SERVER_PORT'] verwenden.

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

testete das auf unserem Linux-Server ...


Übrigens, es basiert auf der Antwort von Skyler vor der Frage.

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

eine andere Frage ähnelt dieser

sie können eine Protokoll-relative URL verwenden, die die Verlinkung in CI beibehalten wird.

in Ihrem config.php anstelle von:

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

stellen;

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

informationen zu protokollrelevanten Links hier .

0
2114L3