重写tomcat 8网址

时间:2015-07-14 09:36:54

标签: regex tomcat url-rewriting rewrite tomcat-valve

我在两个不同的上下文中部署了两个tomcat应用程序:

someurl.com/context1/
someurl.com/context2/

我需要以以下形式截取网址:

someurl.com/clientname/context1/ 

并将其重定向到网址:

someurl.com/context1/clientname

其中“clientname”是动态的

我尝试在tomcats server.xml文件的元素中使用重写阀,但它仍然只适用于包含上下文的URL。即:

someurl.com/context1/clientname/context1 

重新写入

someurl.com/context1/clientname

使用以下正则表达式:

RewriteCond %{REQUEST_URI}  ^.*/context1/.*$

RewriteRule ^.*/context1/(.*)$  /context1/$1    [L]

有没有办法以不考虑上下文的​​方式全局重写网址?

1 个答案:

答案 0 :(得分:1)

经过大量的挖掘后,我发现了一种实现理想结果的简单方法。诀窍是设置根上下文,而不在其中部署任何实际应用程序。然后在该根上下文中添加RewriteValve,如下所示:

<?xml version='1.0' encoding='utf-8'?>
<Context docBase="ROOT" path="/" reloadable="true" crossContext="true">
    <Valve className="org.apache.catalina.valves.rewrite.RewriteValve"/>
</Context>

将crossContext设置为true非常重要,因此根上下文可以与较低级别的上下文进行通信。

然后在根上下文的WEB-INF中,以下rewrite.config将执行此操作:

RewriteRule ^/.*/context1/(.*)$     /context1/$1    [L]

基本上意味着:捕获所有形式为: clientname / context1 / etc 并将其路由到 context1 / clientname / etc