web-dev-qa-db-ja.com

SSLを使用してCodeIgniterで特定のページをロードするにはどうすればよいですか?

SSLを使用してCodeIgniterで特定のページをロードするにはどうすればよいですか? Apache2/mode_sslサーバー。 mod_sslは、保護されていないページとは異なるドキュメントルートを使用します。たとえば、https(ポート443)は/var/www/ssl_html/そしてhttp(ポート80)は/var/www/html/。この設定でCodeIgniterにニースをプレイさせるにはどうすればよいですか?

20
ammonkc

これに取り組む方法はいくつかあります。

オプション1:

おそらく両方のフォルダーにコードをデプロイし、ファイル/system/application/config/config.phpでページを次のように設定します。

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

または

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

次に、非SSL VirtualHostフォルダーで、保護されたページをフォルダーごとにSSLサイトにリダイレクトするように構成を設定します。

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

オプション2:

すべてをSSLに送信し、すべてのコードを1つのフォルダーに保存する

/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

2セットのコードを維持し、post_controller_constructorフックを使用してHTTPSページへの強制リダイレクトを処理します。このフックは、各ページがレンダリングされる前に呼び出され、訪問者がサイト上の現在の場所に基づいて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'] = '';

CIベースURLを自動的に取得= D

2
Jonas WebDev

私の頭に浮かんだ解決策は、str_replace()を次のように使用することです

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

安全な場所が必要なときはいつでも、base_url()の代わりに$ secure_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

別の question はこれに似ています

プロトコル相対URLを使用して、CIでのリンクの持続性を維持できます。

あなたのconfig.php の代わりに:

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

置く;

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

プロトコル相対リンクについての情報 ここ

0
2114L3