.htaccess 当没有请求URI时,从HTTPS还原为HTTP
我有一组重写规则,如下所示,根据路径处理HTTP和HTTPS上的请求路由:.htaccess 当没有请求URI时,从HTTPS还原为HTTP,.htaccess,mod-rewrite,https,.htaccess,Mod Rewrite,Https,我有一组重写规则,如下所示,根据路径处理HTTP和HTTPS上的请求路由: #强制对某些URL使用SSL 重写条件%{HTTPS}关闭 重写COND$1^(管理员|结帐|客户区)[NC] 重写规则(.*)https://%{HTTP_HOST}%{REQUEST_URI}[L,R=301] #强制其他URL使用非SSL 在上重写cond%{HTTPS} 重写cond%{REQUEST_METHOD}=邮递 重写cond%{REQUEST_FILENAME}-F 重写cond%{REQUEST_F
#强制对某些URL使用SSL
重写条件%{HTTPS}关闭
重写COND$1^(管理员|结帐|客户区)[NC]
重写规则(.*)https://%{HTTP_HOST}%{REQUEST_URI}[L,R=301]
#强制其他URL使用非SSL
在上重写cond%{HTTPS}
重写cond%{REQUEST_METHOD}=邮递
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
#此处没有URI的请求的占位符
1美元^(管理|结帐|客户区)[NC]
重写规则(.*)http://%{http_HOST}%{REQUEST_URI}[L,R=301]
但是我注意到,如果用户导航到/checkout
,然后返回主页(那里没有请求URI
),HTTPS协议仍然存在。我尝试添加以下内容:
RewriteCond%{REQUEST\u URI}^$
但是没有用。我在这里做错了什么?好吧,我在这里偶然发现了一篇文章,它让我朝着正确的方向前进。我需要在上述条件之后添加另一个条件块,如下所示:
# Force Non-SSL for the home page (only)
RewriteCond %{HTTPS} on
RewriteCond %{QUERY_STRING} !^ACT= [NC]
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond $1 ^$ [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
似乎就是这样!:) 根据我的经验,请求URI总是存在的。由于它包含了前导斜杠,我认为它无法与
匹配^$
.Hmm,必须有某种方法来匹配以下条件:域后面没有任何内容,或者只是一个尾随斜杠/应该是^/$代码>,没有?URI总是有一个前导斜杠。不-我也试过。。。不要抽雪茄(清除浏览器的缓存。