如何通过.htacess文件强制将http://example.com自动重定向到https://example.com

时间:2019-10-11 11:41:11

标签: codeigniter url redirect https

我有一个安装了通配符SSL的域。我们对子域进行了修改,并将其从HTTP自动重定向到子域的HTTPS。

但是对于主域来说,自从其http://example.com以来,我无法将其重定向到https://example.com [没有www时将保持不变]。

我从网络和研究中获得的所有示例都是从www到非www或从非www到www。

对于非www到非www,我的要求是HTTPS。

适用于我的子域的代码不适用于非WWW。

子域上的工作代码如下所示:

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

我希望http://example.com强制自动改写到https://example.com

2 个答案:

答案 0 :(得分:2)

尝试一下。希望它对您有用

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

答案 1 :(得分:0)

从config.php中启用并设置钩子为true:

$config['enable_hooks'] = TRUE;

然后在config文件夹中创建一个名为hooks.php的新文件,并添加以下内容:

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

在应用程序文件夹(即application / hooks)内创建一个名为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());
    }
}