Tomcat下Java Web应用Http转Https及WWW重定向无限循环问题
配置UrlRewriteFilter实现Http到Https、WWW到非WWW的统一重定向
刚好我之前也用UrlRewriteFilter处理过类似的重定向需求,给你整理了一套完整的配置方案,能完美实现你要的效果——把http://example.com、http://www.example.com、https://www.example.com这三个地址全部重定向到https://example.com(还能保留原请求的路径和参数,当然你也可以改成直接跳转到根域名)。
完整的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> <!-- 统一处理所有需要重定向的场景:非HTTPS请求 或 带www的HTTPS请求 --> <rule> <!-- 条件1:请求协议不是HTTPS --> <condition type="scheme" operator="notequal">https</condition> <!-- 条件2:请求主机是www.example.com(和条件1是"或"的关系) --> <condition type="host" operator="equal" next="or">www.example.com</condition> <!-- 匹配所有请求路径 --> <from>^/(.*)$</from> <!-- 301永久重定向到目标地址,$1保留原请求的路径和参数 --> <to type="permanent" last="true">https://example.com/$1</to> </rule> </urlrewrite>
关键配置说明
type="permanent":返回301永久重定向,对SEO友好,浏览器也会缓存这个重定向规则,减少后续重复请求。last="true":匹配到这个规则后就停止处理其他规则,避免出现多次重定向的问题。$1:捕获原请求的路径部分(比如http://www.example.com/about里的about),确保重定向后用户能访问到对应的页面。如果不需要保留路径,直接把<to>标签里的内容改成https://example.com就行。
额外注意事项
- 确保你已经把UrlRewriteFilter的jar包放在Web应用的
WEB-INF/lib目录下(对应4.0.3版本)。 - 检查
web.xml里是否正确配置了过滤器,不然规则不会生效:
<filter> <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
- 记得把配置里的
example.com替换成你实际使用的域名。 - 测试的时候可以打开浏览器开发者工具的「网络」面板,查看重定向的状态码是不是301,目标URL是否符合预期。
内容的提问来源于stack exchange,提问作者Rick77
相关产品推荐
相关产品推荐

