CodeIgniter を使用したウェブアプリケーションをサーバー移転に合わせて変更した際のメモ。
SSL 通信を強制するために Rewrite
でリダイレクトしていた .htaccess をそのまま設置したら、リダイレクトループと判定されたので代替手段を検索すると、Redirect to ssl in codeigniter が見つかったので採用しました。
application/config/config.php でフックを有効にします。
$config['enable_hooks'] = TRUE;
application/config/hooks.php でフックを定義します。
$hook['post_controller_constructor'][] = array(
'function' => 'redirect_ssl',
'filename' => 'ssl.php',
'filepath' => 'hooks'
);
application/hooks/ssl.php を作成します。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
function redirect_ssl() {
$CI =& get_instance();
$class = $CI->router->fetch_class();
$exclude = array('client'); // 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());
}
}