How to redirect http to https in codeigniter
Please Check this may help
Config changes :- Go to “application/config/config.php” and enable or set hooks to true.
$config['enable_hooks'] = TRUE;
create a new file named hooks.php in “application/config/hooks.php” and add below code in hooks.php:-
$hook['post_controller_constructor'][] = array( 'function' => 'redirect_ssl', 'filename' => 'ssl.php', 'filepath' => 'hooks' );
Now create a new directory with named “hooks” under application directory and then create new file named “ssl.php” in “application/hooks/ssl.php”and add below code to “ssl.php” :-
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()); }}
I tried above all ones but they did not work properly in my case. I found below solution, it works in my case. I hope it will be helpful for you as well.
RewriteEngine onRewriteCond %{HTTPS} offRewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]RewriteCond $1 !^(index\.php|resources|robots\.txt|public)RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php?/$1 [QSA,L]
Now I got a solution,I updated my htaccess file.--
RewriteEngine OnRewriteCond %{HTTPS} off [OR]RewriteCond %{HTTP_HOST} !^www\. [OR]RewriteCond %{HTTP_HOST} ^myhost\.com$ [NC]RewriteRule ^ https://www.myhost.com%{REQUEST_URI} [R=301,L,NE]RewriteCond %{THE_REQUEST} ^[A-Z]+\ /index\.php(/[^\ ]*)?\ HTTP/ RewriteRule ^index\.php(/(.*))?$ myhost.com/$2 [R=301,L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php/$1 [L]
Now, It worked for me smoothly.. :)