Tomcat 8.5重写Valve将根请求重定向到特定的Webapp

时间:2019-11-25 08:07:57

标签: java tomcat url-rewriting tomcat8.5

我需要允许将没有上下文的某些URL转发到特定的Webapp。

因此,我已部署并正在运行一个Web应用程序“ app1”。以下URL http://localhost:8080/app1/ping正常运行。在$CATALINA_HOME/webapps中,我只有app1.war,没有ROOT.war

我想配置重写阀以将http://localhost:8080/ping重定向到/app1/ping

在我的server.xml中,我启用了重写阀。然后,我创建了具有以下内容的$CATALINA_HOME/conf/Catalina/localhost/rewrite.config

RewriteRule ^/ping /app1/ping

在Tomcat日志文件中,我可以看到该规则已被调用:

25-Nov-2019 09:02:11.442 FINE [http-nio-8080-exec-1] org.apache.catalina.valves.rewrite.RewriteValve.invoke Rewrote /ping as /app1/ping with rule pattern ^/ping

但是,尽管如此,我在浏览器中看到的是/ping的404(而不是/app1/ping

在访问日志中,我可以看到两个请求都使用相同的URL显示,但是重定向的请求(以下日志的第一行)显示为404

0:0:0:0:0:0:0:1 [25/Nov/2019:09:02:11 +0100] "GET /app1/ping HTTP/1.1" 404 1078
0:0:0:0:0:0:0:1 [25/Nov/2019:09:02:23 +0100] "GET /app1/ping HTTP/1.1" 200 4

我在这里想念什么?

我在Windows 10上将Tomcat 8.5.40与Oracle的JDK 8一起使用

如果我向规则添加重定向标志:

RewriteRule ^/ping /app1/ping [R]

然后我在Tomcat中得到一个NPE:

java.lang.NullPointerException
  at org.apache.catalina.connector.Response.sendRedirect(Response.java:1318)
  at org.apache.catalina.connector.Response.sendRedirect(Response.java:1288)
  at org.apache.catalina.valves.rewrite.RewriteValve.invoke(RewriteValve.java:435)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
  at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:609)
  at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
  at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
  at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1506)
  at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
  at java.lang.Thread.run(Thread.java:748)

0 个答案:

没有答案
相关问题