regex - 重写 tomcat 8 url

标签 regex tomcat url-rewriting tomcat-valve

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

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

我需要拦截以下形式的网址:

someurl.com/clientname/context1/ 

并将它们重定向到 url:

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]

有没有办法在不考虑上下文的​​情况下全局重写 url?

最佳答案

经过大量的挖掘,我发现了一种非常简单的方法来实现预期的结果。诀窍是在没有部署任何实际应用程序的情况下设置根上下文。然后向该根上下文添加一个 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

关于regex - 重写 tomcat 8 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31402975/

相关文章:

apache - 从 Apache 到 Nginx 的大括号({ 和 })重写规则。

regex - .htaccess 重定向模式

regex - Kibana 查询精确匹配

tomcat 网址和 robots.txt

java - DispatcherServlet 似乎没有处理 ModelAndView 响应

iis-7 - IIS URL 重写 {R :N} clarification

javascript - 如何使用正则表达式 javascript 替换具有特定单词的整行?

java - 替换引号中的空格

java - Spring Scheduler 意外停止

web-services - REST 调用和 URL 之间的区别