基于主机名实现不同页面跳转 - Tomcat环境
解决Tomcat多域名跳转至不同ORDS Apex应用的方案
既然你已经配置好了两个Host且共享同一个appBase,用Tomcat自带的RewriteValve就能完美搞定这个需求,完全不需要额外前置代理,具体步骤如下:
1. 给每个Host启用RewriteValve
先修改你现有的Host配置,给每个Host添加RewriteValve,这样Tomcat会加载对应域名的专属重写规则。
修改后的domainOne.me Host配置:
<Host name="domainOne.me" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Alias>www.domainOne.me</Alias> <Alias>domainOne.me</Alias> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="subvencije_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <!-- 启用RewriteValve,加载该域名的重写规则 --> <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" /> </Host>
修改后的domainTwo.me Host配置:
<Host name="domainTwo.me" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Alias>www.domainTwo.me</Alias> <Alias>domainTwo.me</Alias> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="inovacije_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <!-- 启用RewriteValve,加载该域名的重写规则 --> <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" /> </Host>
2. 创建每个域名的重写规则文件
Tomcat的RewriteValve会从conf/Catalina/[域名]/目录下读取rewrite.config文件,所以我们需要为每个域名创建对应的规则文件:
针对domainOne.me(含www别名)
在Tomcat的conf/Catalina/目录下新建domainOne.me文件夹,然后在里面创建rewrite.config文件,内容如下:
# 匹配domainOne.me根路径的请求,永久跳转到指定ORDS应用 RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^/$ /ords/f?p=111 [R=301,L] # 匹配www.domainOne.me根路径的请求,执行同样跳转 RewriteCond %{HTTP_HOST} ^www\.domainOne\.me$ RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^/$ /ords/f?p=111 [R=301,L]
针对domainTwo.me(含www别名)
同样在conf/Catalina/下新建domainTwo.me文件夹,创建rewrite.config文件,内容如下:
# 匹配domainTwo.me根路径的请求,永久跳转到指定ORDS应用 RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^/$ /ords/f?p=222 [R=301,L] # 匹配www.domainTwo.me根路径的请求,执行同样跳转 RewriteCond %{HTTP_HOST} ^www\.domainTwo\.me$ RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^/$ /ords/f?p=222 [R=301,L]
3. 关键细节说明
R=301是永久重定向,对搜索引擎友好;如果只是临时测试,可以改成R=302(临时重定向)[L]表示这条规则是最后一条,匹配后不会再处理后续规则,避免冲突- 因为两个Host共享同一个
appBase,所以/ords路径在两个域名下都能正常访问,重定向后会正确指向对应的Apex应用 - 确保你的Tomcat版本在7.0.42及以上(ORDS要求的Tomcat版本通常都满足这个条件),
RewriteValve是这个版本之后Tomcat自带的功能
4. 生效测试
配置完成后重启Tomcat服务器,然后用浏览器或curl命令验证:
- 访问
http://domainOne.me或http://www.domainOne.me,应该自动跳转到http://domainOne.me/ords/f?p=111 - 访问
http://domainTwo.me或http://www.domainTwo.me,应该自动跳转到http://domainTwo.me/ords/f?p=222
内容的提问来源于stack exchange,提问作者Janko
相关产品推荐
相关产品推荐

