2017-09-27 18 views
0

私は既存のcodeigniter(v2.1.4)アプリケーションでhttps/sslを追加しようとしています。Codeigniter 2.x SSLリダイレクトループ

私はwebfactionホスティングで働いています。通常のsslセットアップの方法には、ホストダッシュボードに第2のWebサイトレコードを追加することが含まれます。これはhttp://をhttps://にリダイレクトし、.htaccess(明快にするために.htaccess_Bと呼ぶ)ファイルを使用します。 CodeIgniterのアプリケーションが含まれているオリジナルのウェブサイトレコードがこの.htaccessファイル(.htaccess_A)がSSL証明書がインストールされ、正しく設定されている

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond $1 !^(index\.php|javascript|images|robots\.txt) 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

ファイルが含まれ

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-SSL} !on 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

:このウェブサイトレコードにのみ、この.htaccessファイルが含まれていますウェブホストの指示に従って。私はthisメソッド(上の答え)を試しましたが、私はリダイレクトループに固執しています。 config.phpの中

マイ設定変数:

$config['base_url'] = ''; 
$config['enable_hooks'] = TRUE; 
$config['cookie_secure'] = TRUE; 

hooks.php

$hook['post_controller_constructor'][] = array(
    'function' => 'redirect_ssl', 
    'filename' => 'ssl.php', 
    'filepath' => 'hooks' 
    ); 

と私のssl.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
function redirect_ssl() { 
    $CI =& get_instance(); 
    $class = $CI->router->fetch_class(); 
    $exclude = array(''); // add more controller name to exclude ssl. 
    if(!in_array($class,$exclude)) { 
     // redirecting to ssl. 
     $CI->config->config['base_url'] = str_replace('http://', 'https://', $CI->config->config['base_url']); 
     if ($_SERVER['SERVER_PORT'] != 443) redirect($CI->uri->uri_string()); 
    } else { 
     // redirecting with no ssl. 
     $CI->config->config['base_url'] = str_replace('https://', 'http://', $CI->config->config['base_url']); 
     if ($_SERVER['SERVER_PORT'] == 443) redirect($CI->uri->uri_string()); 
    } 
} 

`

私が試しました.hの名前を変更するtaccessファイルを元のウェブサイトレコード(.htaccess_A)に追加し、base_urlにhttps://を追加して空きなしにします。私はリダイレクトループに

を立ち往生続けるhttps://mydomainhere.com/ネット::クロム コンソールでERR_TOO_MANY_REDIRECTS

任意のアイデアをGET!お使いの設定で

おかげ

+0

は彼らと一緒にチケットを開いてみ。私はPHPに精通していませんが、先週webfactionでdjangoサイトをリダイレクトしました。同じアプローチ.htaccessファイル。彼らはそれをチェックし、それを私のブラウザのキャッシュのためにsugestedした。私はキャッシュをクリアした後、それは働いた。彼らはかなり役に立ちます。 – ionescu77

答えて

0
  1. 変更BASE_URL:

    $config['base_url'] = 'https://mydomainhere.com/'; 
    
  2. のhttpからhttpsに着信トラフィックをリダイレクトします:

    RewriteCond %{HTTPS} off 
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
    
関連する問題