无法访问codeigniter上的https

时间:2017-07-09 06:21:20

标签: php codeigniter

以下是我项目中的base_url of config.php

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

但我的网站总是转到http://www.mywebsite.com,除非用户在浏览器网址中隐式写入https。

有什么问题?

为什么codeigniter会转到config.php中定义的url?

3 个答案:

答案 0 :(得分:0)

HTTPS: - 全名是(超文本传输​​协议安全)。它是一个扩展的或你可以说安全版本的HTTP(超文本传输​​协议)。如果您在服务器上启用了https,则会在浏览器的地址栏中显示锁定图标。 对于数据加密,它使用SSL(安全套接字层)证书安装在您的服务器上。大多数使用https来安全地使用ssl传输数据。 因此大多数网站需要ssl或https网址。我们可以使用钩子轻松管理在codeigniter中重定向到https url。它是CI的另一个优点。我们需要创建一些代码行来获取ssl url或重定向到codeigniter中的https url。默认的codeigniter没有这种类型的功能,所以我们需要强制重定向到ssl url。下面我们将看到如何使用sign重定向和codeigniter。

1.Config更改: - application/config/config.php并启用或设置挂钩为true。

$config['enable_hooks'] = TRUE;

2.在application/config/hooks.php中创建名为hooks.php的新文件,并在hooks.php中添加以下代码。

$hook['post_controller_constructor'][] = array(

                                'function' => 'redirect_ssl',

                                'filename' => 'ssl.php',

                                'filepath' => 'hooks'

                                );

3.现在在应用程序目录下创建一个名为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());

    }

}

现在检查您的网站,您将在网址中获得https。使用hooks在codeigniter中重定向到https网址是一种不错的方法,而不是htaccess

答案 1 :(得分:0)

如果根目录中有var navButtons = document.getElementsByClassName("navButtons"); for (var i=0; i<navButtons.length; i++){ navButtons[i].addEventListener("mouseover", mouseOver); navButtons[i].addEventListener("mouseout", mouseOut); } function mouseOver(event) { event.target.parentNode.style.color = "red"; } function mouseOut(event) { event.target.parentNode.style.color = "black"; }文件用于允许“漂亮网址”,则可以添加一些强制重定向“https”协议的命令。

行后

<nav>
  <div class="navButtons">
      <div id="about">about</div>
      <div id="portfolio">portfolio</div>
      <div id="contact">contact</div>
  </div>   
</nav>

 

在这些行

.htaccess

其余命令保持不变。

保留问题中显示的RewriteEngine on 设置。无需更改其他代码。

答案 2 :(得分:0)

你需要使用HOOKS,因为它比.htaccess更简单。 首先在***中更改基本网址

  

应用/配置/ config.php中

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

内部

  

应用/配置/ hooks.php

将此代码编写为:

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

现在在

中将文件名设为 ssl.php
  

应用/钩/

并粘贴以下代码

<?php
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());
    }
}
?>

现在它应该像魅力一样工作,因为我使用了相同的方法并找到了最简单的方法