.htaccess HTACCESS重写规则导致重定向循环
我已经在NGINX代理后面设置了Apache,我的HTTPS重定向(重写)规则会导致重定向循环。看起来,尽管我正确设置了环境变量,但HTTPS返回为false 我的重写规则:.htaccess HTACCESS重写规则导致重定向循环,.htaccess,nginx,mod-rewrite,apache2,reverse-proxy,.htaccess,Nginx,Mod Rewrite,Apache2,Reverse Proxy,我已经在NGINX代理后面设置了Apache,我的HTTPS重定向(重写)规则会导致重定向循环。看起来,尽管我正确设置了环境变量,但HTTPS返回为false 我的重写规则: RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] 我的环境变量: SetEnvIf X-Forwar
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
我的环境变量:
SetEnvIf X-Forwarded-Proto https HTTPS=on
SetEnvIf X-Forwarded-SSL on HTTPS=on
当我在PHP中执行var_dump
时,我可以看到变量设置正确:
[HTTPS]=>打开
我想知道为什么RewriteCond%{HTTPS}off[或]
总是返回true,即使URL是通过HTTPS访问的,并且环境变量已设置
p、 作为修复,如果我使用
RewriteCond%{HTTP:X-Forwarded-Proto}!https[NC]
代替RewriteCond%{https}off[OR]
,重定向循环消失。变量%{https}
的值由mod_ssl处理,但在您的情况下,由于https由nginx而不是Apache处理,%{https}
是off
此外,此变量不是环境变量,因此无法识别您的setenif
,您应该编写%{ENV:HTTPS}
。但是,值得注意的是,setenif
是在mod_重写之后解释的,因此它也不会工作
正如您所发现的,在您的情况下,正确的方法是使用RewriteCond%{HTTP:X-Forwarded-Proto}=https[NC]