我正在尝试在我的某些网站上设置从http到https的重定向。
我正在用Java以编程方式执行此操作,因为我在同一个servlet容器/ Web应用程序中运行着许多网站,并且其中只有一部分连接到cloudflare,所以只有其中一部分可以使用https。 / p>
编码似乎非常简单:
String requestURLLower = req.getRequestURL().toString().toLowerCase();
if ( isCloudflareSite && requestURLLower.startsWith("http:")) {
StringBuilder requestURL = new StringBuilder(requestURLLower);
System.out.println("Got requrl lower " + requestURLLower + " scheme " +
req.getScheme() + " is secure " + req.isSecure());
String queryString = req.getQueryString();
if (queryString != null) {
requestURL.append('?').append(queryString);
}
String link = Strings.replace(requestURL.toString(), "http:", "https:");
System.out.println("RURLLOWEr redirecting to " + link + " from " +
requestURL);
res.setStatus(301);
res.setHeader( "Location", link);
return;
}
运行此代码时,浏览器重定向次数过多,并显示错误消息。
我在浏览器中输入的初始URL是https本身: https://www.xxx.com.au/xxx?page=hello
在我的浏览器中输入确切的网址后,程序的输出是这样的:
Got requrl lower http://www.xxx.com.au/xxx scheme http is secure false
RURLLOWEr redirecting to https://www.xxx.com.au/xxx?page=hello from
http://www.xxx.com.au/xxx?page=hello
从一页加载开始,此输出重复了大约20次。
我在这里是否遗漏了一些明显的东西,还是java没有检测到协议?
我唯一能想到的是它与Cloudflare提供的https有关。
答案 0 :(得分:0)
Cloudflare提供的SSL位于用户和Cloudflare之间。 Cloudflare(使用“灵活的” https设置)实际上使用http连接到服务器。