我的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]
不幸的是,这不起作用,请建议正确的重写规则。
答案 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]