我有一个安装了通配符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
答案 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());
}
}