Перенаправление с HTTPS на HTTP


Веб-приложение построено с использованием CodeIgniter, а я использую гибкий SSL Cloudflare.

Страницы загружаются по протоколу HTTPS, но всякий раз, когда происходит перенаправление, страница загружается по протоколу HTTP. С этого момента все страницы обслуживаются по протоколу HTTP.

Вот пример:

public function logout()
{
    $this->session->sess_destroy();
    redirect('/');

}

После функции выхода из системы все страницы загружаются по протоколу HTTP.

Как я могу гарантировать, что страницы будут загружаться по протоколу HTTPS после перенаправления?

Вот содержимое моего файла .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
 <IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule> 

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.myurl.com/$1 [R,L]
Author: user138172, 2017-05-08

2 answers

Простым способом может быть установка base_url следующим образом

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

Это приведет к тому, что все функции CI, которые обращаются к $config['base_url'], включая redirect(), будут использовать https.

Не часто говорят о способности base_url() принудительно использовать протокол с помощью второго аргумента. например,

echo base_url("blog/post/123", 'https'); 

Вы можете использовать .htaccess для принудительного перенаправления на протокол https. Поместите это выше существующих команд.

RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
 2
Author: DFriend, 2017-05-08 21:39:31

Вам необходимо настроить файл .htaccess

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Заменить example.com в ваш домен

Таким будет ваш текущий файл .htaccess

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} ^system.* RewriteRule ^(.*)$ /index.php?/$1 [L] RewriteCond %{REQUEST_URI} ^application.* RewriteRule ^(.*)$ /index.php?/$1 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] </IfModule> <IfModule !mod_rewrite.c> ErrorDocument 404 /index.php </IfModule> 
        RewriteEngine On 
        RewriteCond %{SERVER_PORT} 80 
        RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Изменение 2 с помощью крючков для перенаправления нет необходимости изменять.htaccess

Изменения конфигурации: - Перейдите к "application/config/config.php " и включите или установите для крючков значение true.

$config['enable_hooks'] = TRUE;

Создайте новый файл с именем hooks.php в "application/config/hooks.php " и добавьте приведенный ниже код в hooks.php:

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

Теперь создайте новый каталог с именем "крючки" в каталоге приложений, а затем создайте новый файл с именем"ssl.php "в "application/hooks/ssl.php " и добавьте приведенный ниже код в"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());
    }
}
 2
Author: Otávio Barreto, 2017-05-08 19:45:29