重定向到HTTPS会返回错误“重定向太多”

时间:2015-09-15 14:21:18

标签: .htaccess redirect

我试图通过htaccess强制https,并且收到“太多重定向”错误。以下是我正在尝试实现此目的。

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

关于如何实现这一目标的任何想法或为什么这似乎不起作用?

编辑:我按照Force https://www. for Codeigniter in htaccess with mod_rewrite这里的答案,这似乎是导致我的重定向循环。当我删除这部分时:

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

重定向循环消失;但它不会重定向到https。

2 个答案:

答案 0 :(得分:17)

我不能确定这是否与某个(或某些)托管服务提供商有关,但没有一个解决方案适合我。由于主机提供商的限制,我无法获得apache版本,除了它是2.x。

这是做了什么,可能对某人有帮助:

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

答案 1 :(得分:1)

如RiggsFolly所述,该声明存在问题,但如果不起作用,您可以尝试在head标记中强制它:

$use_sts = true;

// iis sets HTTPS to 'off' for non-SSL requests
if ($use_sts && isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
    header('Strict-Transport-Security: max-age=31536000');
} elseif ($use_sts) {
    header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], true, 301);
    // we are in cleartext at the moment, prevent further execution and output
    die();
}``