我知道这个问题已被问了一千次,但我似乎无法找到答案。
我们有一个由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