URL Redirection/Rewrite 在 Tomcat
URL Redirection/Rewrite on Tomcat
我们正在将托管在 JBOSS 上的 clickonce 应用程序(这不是通常的 war/ear 部署)迁移到 Tomcat,但是 URL 重定向存在问题.
用户从浏览器点击的实际URL如下所示,
https://abc.domainname:port/app/app.application
这应该如下重定向,
https://abc.domainname:port/abc/app/app.application
应用部署在tomcatbasedir/webapp/abc/app
下
我曾尝试使用 重写阀,但这并没有帮助我实现这一目标。
context.xml 或 server.xml
阀门类名="org.apache.catalina.valves.rewrite.RewriteValve"
和
在 catalinahome/conf 下创建了一个 rewrite.config 并放置了以下条目。
RewriteRule ^/app/app.application$ abc/app/app.application [RL]
有关信息,请参阅 JBOSS 中用于执行重定向的规则。
rewrite name="rule-1" pattern="^/app/app.application" substitution="/abc/app/app.application" flags= “RL”
错误跟踪:
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [org
.apache.catalina.valves.rewrite.RewriteValve[localhost]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:188)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:931)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:261)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:766)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:688)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.valves.rewrite.RewriteValve[localhost]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
at org.apache.catalina.core.StandardPipeline.startInternal(StandardPipeline.java:176)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:948)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1412)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1402)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: rewriteValve.invalidLine
at org.apache.catalina.valves.rewrite.RewriteValve.parse(RewriteValve.java:709)
at org.apache.catalina.valves.rewrite.RewriteValve.parse(RewriteValve.java:237)
:
rewrite.config
上的内容
RewriteEngine 开启
RewriteRule "^/app/app.application" "/abc/app/app.application" [RL]
非常感谢任何指点或帮助。
RewriteValve
中没有 RewriteEngine
指令(参见 documentation),因此出现解析错误。
RewriteRule
指令几乎与 Apache 的 mod_rewrite
指令一样工作,但有一点不同:模式必须匹配 整个 URI 路径。因此你需要使用:
RewriteRule /app/app.application(/.*)? /abc/app/app.application [RL]
我们正在将托管在 JBOSS 上的 clickonce 应用程序(这不是通常的 war/ear 部署)迁移到 Tomcat,但是 URL 重定向存在问题.
用户从浏览器点击的实际URL如下所示,
https://abc.domainname:port/app/app.application
这应该如下重定向,
https://abc.domainname:port/abc/app/app.application
应用部署在tomcatbasedir/webapp/abc/app
下我曾尝试使用 重写阀,但这并没有帮助我实现这一目标。
context.xml 或 server.xml
阀门类名="org.apache.catalina.valves.rewrite.RewriteValve" 和
在 catalinahome/conf 下创建了一个 rewrite.config 并放置了以下条目。
RewriteRule ^/app/app.application$ abc/app/app.application [RL]
有关信息,请参阅 JBOSS 中用于执行重定向的规则。
rewrite name="rule-1" pattern="^/app/app.application" substitution="/abc/app/app.application" flags= “RL”
错误跟踪:
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [org
.apache.catalina.valves.rewrite.RewriteValve[localhost]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:188)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:931)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:261)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:766)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:688)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.valves.rewrite.RewriteValve[localhost]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
at org.apache.catalina.core.StandardPipeline.startInternal(StandardPipeline.java:176)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:948)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1412)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1402)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: rewriteValve.invalidLine
at org.apache.catalina.valves.rewrite.RewriteValve.parse(RewriteValve.java:709)
at org.apache.catalina.valves.rewrite.RewriteValve.parse(RewriteValve.java:237)
:
rewrite.config
上的内容RewriteEngine 开启
RewriteRule "^/app/app.application" "/abc/app/app.application" [RL]
非常感谢任何指点或帮助。
RewriteValve
中没有 RewriteEngine
指令(参见 documentation),因此出现解析错误。
RewriteRule
指令几乎与 Apache 的 mod_rewrite
指令一样工作,但有一点不同:模式必须匹配 整个 URI 路径。因此你需要使用:
RewriteRule /app/app.application(/.*)? /abc/app/app.application [RL]