重写 tomcat 8 个 url
Re-writing tomcat 8 urls
我在两个不同的上下文中部署了两个 tomcat 应用程序:
someurl.com/context1/
someurl.com/context2/
我需要截取 url 的形式:
someurl.com/clientname/context1/
并将他们重定向到 url:
someurl.com/context1/clientname
其中 "clientname" 是动态的
我曾尝试在我的 tomcats server.xml 文件的元素中使用重写阀,但它仍然仅适用于包含上下文的 urls。即:
someurl.com/context1/clientname/context1
被重写为
someurl.com/context1/clientname
使用以下正则表达式:
RewriteCond %{REQUEST_URI} ^.*/context1/.*$
RewriteRule ^.*/context1/(.*)$ /context1/ [L]
有没有办法以不考虑上下文的方式全局重写 urls?
经过大量的挖掘,我发现了一个非常简单的方法来达到预期的结果。诀窍是在没有部署任何实际应用程序的情况下设置根上下文。然后向该根上下文添加一个 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/ [L]
这基本上意味着:捕获所有形式为 clientname/context1/etc 的你并将它们路由到 context1/clientname/etc
我在两个不同的上下文中部署了两个 tomcat 应用程序:
someurl.com/context1/
someurl.com/context2/
我需要截取 url 的形式:
someurl.com/clientname/context1/
并将他们重定向到 url:
someurl.com/context1/clientname
其中 "clientname" 是动态的
我曾尝试在我的 tomcats server.xml 文件的元素中使用重写阀,但它仍然仅适用于包含上下文的 urls。即:
someurl.com/context1/clientname/context1
被重写为
someurl.com/context1/clientname
使用以下正则表达式:
RewriteCond %{REQUEST_URI} ^.*/context1/.*$
RewriteRule ^.*/context1/(.*)$ /context1/ [L]
有没有办法以不考虑上下文的方式全局重写 urls?
经过大量的挖掘,我发现了一个非常简单的方法来达到预期的结果。诀窍是在没有部署任何实际应用程序的情况下设置根上下文。然后向该根上下文添加一个 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/ [L]
这基本上意味着:捕获所有形式为 clientname/context1/etc 的你并将它们路由到 context1/clientname/etc