私を悩ませています。
したがって、私は JSP を使用しており、実装されたフィルターと拡張された HttpServlet 内にそれぞれこれらのメソッド (単純な例) があります。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
((HttpServletResponse) response).sendRedirect(((HttpServletRequest) request).getContextPath() + "/foo");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.sendRedirect(request.getContextPath() + "/foo");
}
ではlocalhost:8080/app
、Filter と HttpServlet の両方が正しくリダイレクトしlocalhost:8080/app/foo
ます。
しかし、次のように Apache のプロキシwww.mysite.com/app
の下に を隠している at では、tomcatserver:8080/app
RedirectPermanent /app /app/
ProxyPass /app/ http://tomcatserver:8080/app/
ProxyPassReverse /app/ http://tomcatserver:8080/app/
Filter は私を OK にリダイレクトしますwww.mysite.com/app/foo
が、HttpServlet は次のいずれかを行います。
- (同じドメインから) Tomcatのサーバーアドレスを明らかにし、
tomcatserver:8080/app/foo
またはにリダイレクトします - (ドメイン外から)ロードがスタックするだけです。
それで... 何が原因ですか?
PS: HttpServlet からrequest.getContextPath()
と の"/"
部分を削除すると問題が解決することはわかっていますが、私はそれを求めているわけではありません。