我试图通过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。
答案 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();
}``