我正在处理托管在Tomcat服务器上的Java Web应用程序。我必须设置从www到非www和从http到https的重定向。我想要以下三个网址:
重定向到
为此目的,我正在使用tuckey.org的UrlRewriteFilter
版本4.0.3。这是我的urlrewrite.xml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN" "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite>
<rule>
<name>Redirect www to non-www and http to https</name>
<condition type="request-url" operator="equal">(^http://example.com|^http://www.example.com|^https://www.example.com)</condition>
<from>^(.*)$</from>
<to type="permanent-redirect" last="true">https://example.com$1</to>
</rule>
</urlrewrite>
重定向工作但网站未加载,浏览器显示消息:
此页面无效 example.com重定向了你太多次了。
我使用了重定向检查器,发现在初始重定向到https://example.com/之后,另一个重定向到https://example.com/,然后是另一个,依此类推 - 网址重定向到自身。我不明白是什么产生了这种无限循环。任何帮助将不胜感激!
更新:我还没有解决方案。如果我从条件元素中删除第一个URL,则其他两个重定向工作正常,但问题是如何设置http://example.com的重定向。
我尝试了另一种方法 - 通过粘贴以下代码在web.xml文件中设置重定向到https:
<security-constraint>
<web-resource-collection>
<web-resource-name>all</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
结果相同 - https://example.com在无限循环中重定向到自身。在这种情况下,唯一的区别是重定向的状态代码为302.有关导致此问题的原因以及如何解决问题的任何想法?
更新:使用UrlRewriteFilter
:
运行结果:curl http://example.com
HTTP/1.1 301 Moved Permanently
Server: nginx admin
Date: Fri, 04 May 2018 13:24:16 GMT
Content-Type: text/plain
Content-Length: 0
Connection: keep-alive
Location: https://example.com/
X-Cache: HIT from Backend
运行结果:curl https://example.com/
HTTP/1.1 301 Moved Permanently
Date: Fri, 04 May 2018 11:58:51 GMT
Server: Apache-Coyote/1.1
Location: https://example.com/
Content-Length: 0
Content-Type: text/plain
答案 0 :(得分:4)
我会简化下面的规则
<rule>
<name>Ensure HTTPS</name>
<condition type="scheme" operator="notequal" next="or">https</condition>
<condition name="host" operator="notequal">www.example.com</condition>
<from>^/(.*)$</from>
<to type="redirect">https://example.com/$1</to>
</rule>
还要确保证书对example.com
有效,并在下面的线程中指出
答案 1 :(得分:1)
我对卷曲的了解可能有点过时,但我认为你必须curl -L url
才能遵循重定向。
另外,您确定问题与您的客户无关吗?
答案 2 :(得分:0)
看来,来自https://example.com的回复总是低于标题:
Location: https.example.com
response Code: 301
操作和重定向是浏览器的行为。您可能需要找到一种方法来删除这些标头。希望这在某种程度上有所帮助。