如何在urlrewrite.xml中使用环境变量?Tomcat变量未解析问题
问题解决方案
1. 正确读取JVM系统变量
UrlRewriteFilter不支持直接用${contextName}解析JVM启动参数,需要使用它内置的%{system-property:变量名}语法来读取系统属性。修改你的urlrewrite.xml规则如下:
<?xml version="1.0" encoding="utf-8"?> <!-- Configuration file for UrlRewriteFilter http://tuckey.org/urlrewrite/ --> <urlrewrite use-query-string="true" default-match-type="wildcard"> <rule> <from>%{system-property:contextName}</from> <to type="permanent-redirect" last="true">abc.com</to> </rule> </urlrewrite>
2. 排查%{context-path}失效的可能原因
如果之前尝试%{context-path}未成功,可从以下几点排查:
- 确认项目部署的上下文路径:若项目以
ROOT.war部署,上下文路径为空;若为companyApp.war,路径为/companyApp,规则中的匹配路径需要对应(比如要写/%{context-path}而非直接写变量) - 检查UrlRewriteFilter版本:部分旧版本对
context-path变量的支持存在缺陷,建议升级至最新稳定版 - 验证匹配逻辑:确保
<from>的格式符合实际请求路径,比如如果是匹配以上下文路径开头的所有请求,应该写<from>/%{context-path}(.*)</from>
3. 验证变量解析状态
可添加测试规则确认变量是否被正确读取:
<rule> <from>/test-vars</from> <to type="redirect">/check?contextName=%{system-property:contextName}&contextPath=%{context-path}</to> </rule>
访问/test-vars后,查看跳转后的URL参数,即可确认两个变量是否获取到了预期值。
内容的提问来源于stack exchange,提问作者Shubhankar Kumar
相关产品推荐
相关产品推荐

