.htaccess 重定向到HTTPS返回错误“;“重定向太多”;

.htaccess 重定向到HTTPS返回错误“;“重定向太多”;,.htaccess,redirect,.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 ^(.*)$ in

我试图通过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]
关于我如何做到这一点,或者为什么这似乎不起作用,有什么想法吗

编辑:我遵循这里的答案,这似乎导致了重定向循环。当我移除此部分时:

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

重定向循环消失;但是,它没有重定向到https。

正如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();
}``

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

这就是我所做的,也许对某人有帮助:

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

可能的重复我实际上是在发布这篇文章之前遇到了上面的文章。我试着使用那篇文章中的建议,这似乎是导致重定向循环的原因。如果我不能让它在htaccess中工作,我会尝试一下。谢谢