【发布时间】:2020-03-20 11:41:35
【问题描述】:
我需要允许将某些没有上下文的 URL 转发到特定的 webapp。
所以,我部署并运行了一个 webapp“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)
【问题讨论】:
-
@user7294900:这是关于在单个 Web 应用程序内进行重定向。我实际上是在尝试在访问我的 web 应用程序之前这样做,将上下文添加到没有上下文的 URL(不使用 ROOT.war)。我也没有为特定上下文启用阀门(因为它应该没有一个)
-
我遇到了同样的问题。奇怪的是,我使用 Tomcat 8.5.58 在我的 Windows 开发机器上模拟了你正在做的同样的事情,并且它工作正常,但是 Ubuntu Server 的 Tomcat 8.5.39-1ubuntu1~18.04.3 有你看到的问题。那么这可能是Tomcat中的一个错误?
标签: java tomcat url-rewriting tomcat8.5