将Tomcat中的URL从动态appName重写为现有上下文

时间:2017-03-19 15:59:31

标签: tomcat url-rewriting

我的Tomcat服务器运行两个不同的上下文,其中包含以下URL:

myhost.url / CONTEXT1 / ...

myhost.url /上下文2 / ...

我想捕获请求:

myhost.url /应用程序的名字/ ...

appname是动态的,并将这些请求重定向到:

myhost.url /上下文2 /应用程序的名字/ ...

一个约束是在请求发送到 myhost.url / context1 / ... 或ROOT上下文下的某些静态文件时忽略任何重写。

我想使用Tomcat的RewriteValve来重写URL,因此我添加了一个具有以下配置的ROOT上下文:

<?xml version='1.0' encoding='utf-8'?>


<Context docBase="ROOT" reloadable="false" crossContext="true">
    <Valve className="org.apache.catalina.valves.rewrite.RewriteValve"/>
</Context>

并在WEB-INF目录下添加了一个rewrite.config文件,其配置如下:

RewriteCond  %{CONTEXT_PATH} ^(?!/context1/).+$     [OR]
RewriteCond  %{REQUEST_URI}  ^(?!/favicon.ico)          [OR]
RewriteCond  %{REQUEST_URI}  ^(?!/blank.html)           [OR]
RewriteCond  %{REQUEST_URI}  ^(?!/error.html)           [OR]
RewriteCond  %{REQUEST_URI}  ^(?!/index.html)
RewriteRule  ^/(.+)$                /context2/$1    [L]

不幸的是,这不起作用,请建议正确的重写规则。

1 个答案:

答案 0 :(得分:0)

我设法以满足我要求的方式执行重写表。

只有在请求的上下文与“context1”或“context2”不同且上下文可用(成功部署)的情况下才会进行重写。 或者,如果请求的网址与'/','/ favicon.ico','/ blank.html','/ error.html','/ index.html'和&amp; '/图像'。

RewriteCond  %{CONTEXT_PATH} ^/(?!(context1|context2))  [OR]
RewriteCond  %{REQUEST_URI}  ^/(?=.+$)((?!(favicon.ico|blank.html|error.html|index.html|images)).*$)
RewriteRule  ^(.+)$               /context2$1   [L]