需要https仅适用于codeigniter中的特定页面

时间:2014-05-30 07:18:29

标签: http https codeigniter-url codeigniter-routing

通过浏览我知道下面的代码将使我们用https网址重定向几页。以下是我分享的代码

RewriteEngine on

RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} controller/function
RewriteRule ^(.*)$ https://www.yourdomain.com/controller/function[R=301,L]

RewriteCond %{SERVER_PORT} 443 
RewriteCond %{REQUEST_URI} controller/function
RewriteRule ^(.*)$ https://www.yourdomain.com/controller/function[R=301,L]

RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L] 

现在我的问题是有一个名为authenticate.php的控制器,在验证文件中有很多功能,如忘记密码,登录,注册等。我不要像上面的代码那样编写每个函数。我想要那个适用于单次拍摄中所有功能的htaccess代码。任何人都可以分享这个答案!!!!!!

1 个答案:

答案 0 :(得分:0)

我没有为此目的使用htaccess。我在codeigniter中使用钩子,如in this blog post

所述

您必须在$ ssl数组中设置您想要强制使用ssl的控制器,在$ partials数组中设置您不关心的控制器(您可能希望它们同时提供http和https,如博客中所述)邮件),其余的将被迫使用http。

对于您的特定模式,即控制器/功能,您可以将check_ssl()的功能更改为

function check_ssl()
{
    $CI =& get_instance();
    $class = $CI->router->fetch_class();
    #method = $CI->router->fetch_method();

    $ssl = array('controller/function');
    $partial =  array('login','registration');

    if(in_array("$class/$method", $ssl)) {
        force_ssl();
    } else if(in_array($class,$partial)) {
       return;
    } else {
       unforce_ssl();
    }
}

如果你不想要偏袒,你可以把这个部分弄清楚。如果您不希望其余控制器仅使用http,则将unforce_ssl()替换为return;