を使用してリバースプロキシ、私は例えば、(エンドポイントの後にパスを持つ)外部URLへのルートの特定のエンドポイントにしたい:TomcatのWebアプリケーションは、私はTomcatの中に簡単なWebアプリケーションを持っているのRewriteRule
localhost/myapp/api/hello -> http://my-api-domain.com/hello
私は、文脈に追加しましたアプリ のMETA-INFフォルダ内の.xmlそして、次の構文でWEB-INFフォルダにrewrite.configファイルを追加しました:
RewriteRule ^/api/.*$ http://my-api-domain.com/$1 [L]
RewriteRule ^/.*$ hello.html [L]
それは正しくhello.htmlへのルートすべてのエンドポイントを、私はナビゲートto/api /それは次のエラーを返します:
java.lang.IndexOutOfBoundsException: No group 1
java.util.regex.Matcher.group(Matcher.java:538)
org.apache.catalina.valves.rewrite.Substitution$RewriteRuleBackReferenceElement.evaluate(Substitution.java:43)
org.apache.catalina.valves.rewrite.Substitution.evaluate(Substitution.java:267)
org.apache.catalina.valves.rewrite.RewriteRule.evaluate(RewriteRule.java:135)
org.apache.catalina.valves.rewrite.RewriteValve.invoke(RewriteValve.java:351)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1441)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
書き換えの設定で '$ 1' はせずに、
RewriteRule ^/api/.*$ http://my-api-domain.com/ [L]
a.gそれは404を返します。
/myapphttp://my-api-domain.com/
外部URLへのアプリのコンテキストと前方の要求を終了するにはどうすればよいですか?そして私はそれをどのように透明にするのですか?私は書き換えにPフラグの代わりにLを追加しようとした
(APIリクエストが、同様のMyAppから来ているように見えるであろう)、それは以下で失敗:
Invalid flag in: RewriteRule ^/api/.*$ http://my-api-domain.com/ [P] flag: P
Tomcatバージョン:8.5。 12 、Javaバージョン:1.8.0_144
ありがとうございました!