Apache .htaccess将http uri转换为https导致重定向循环

时间:2015-12-16 11:14:23

标签: apache .htaccess redirect ssl

我知道这个问题已被问了一千次,但我似乎无法找到答案。

我们有一个由123-reg的共享网络托管包托管的网站(无法访问http配置文件)。我已将ssl添加到站点,并且在直接请求使用https时证书可以正常工作。

当我尝试使用.htaccess文件将所有内容从http重定向到https时出现问题。

首先,我在条件中尝试了SERVER_PORT变量:

RewriteEngine On
RewriteBase /

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.co.uk/$1/ [R=301,L]

这不起作用,因为https重定向请求也使用端口80(我现在用123-reg查询它)。始终满足条件并导致重定向循环。

接下来我尝试了HTTPS变量:     RewriteEngine On     RewriteBase /

RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://example.co.uk/$1/ [R=301,L]

始终满足此条件,因为变量永远不会设置为on(并导致重定向循环)。我想知道这是否与https的端口号= 80相关。

我发现了两个服务器变量SSL和HTTP_X_FORWARDED_SSL,这些变量确实从""为1,但只有当我删除.htaccess文件并且直接请求http或https时才会。

如果我尝试在RewriteCond条件中使用SSL或HTTP_X_FORWARDED_SSL变量,则会导致重定向循环。

在重定向循环发生时我看不到变量,所以我不知道它们是否在重定向期间被更改。

编辑:

我找到了答案。我正在使用:

RewriteCond %{SSL} !1

应该是:

RewriteCond %{ENV:SSL} !1

0 个答案:

没有答案