apache - 如何更正(Wicket in)Tomcat at/myapp behinds Apache proxy at/that send incorrect redirect to/myapp/xxx instead of/xxx?

标签 apache tomcat servlets wicket

我已经在 Tomcat 的/myapp 部署了我的 Wicket 应用程序,并且我已经使用它把它放在 Apache Web 服务器后面

ProxyPass / http://localhost:8080/myapp/
ProxyPassReverse / http://localhost:8080/myapp/

现在 Wicket 错误地将用户重定向到/myapp/xxx 而不是/xxx。

有没有办法让 Wicket(1.3.5) 使用/作为我的根路径(而不是/myapp,这是 servlet 部署上下文路径)?!

编辑:在以下链接中描述了一个解决方案,但它不适用于 1.3.5 版本: 我找到了:https://cwiki.apache.org/WICKET/wicket-behind-a-front-end-proxy.html

编辑:问题在于 wicket 使用 ServletResponse#sendRedirect 的相对路径重定向,而 Tomcat 将它们转换为开头包含/myapp 的绝对重定向。我试过 mod_jk(AJP) 但没有区别!

应该有某种方式告诉 proxy-pass 或 mod-jk 在将它们发送给客户端之前重写重定向!

最佳答案

我没有找到直接答案,但使用了 mod jk 的以下变通方法,我想也可以使用代理传递。

RewriteRule           /myapp/(.*)      /$1 [L,R]
RewriteRule           ^(.*)            /myapp$1 [PT]
JkMount               /myapp/*         ajp13_worker

第一行重定向来自以/myapp/* 开头的客户端的请求(这是不正确的 Wicket/Tomcat/Apache 重定向的结果)到/*。

第二行重写所有从/* 到/myapp/* 的请求,第三行将它们发送到 tomcat。

对于代理通行证,第三行应替换为:

ProxyPass             /myapp/          http://localhost:8080/myapp/
ProxyPassReverse      /myapp/          http://localhost:8080/myapp/

关于apache - 如何更正(Wicket in)Tomcat at/myapp behinds Apache proxy at/that send incorrect redirect to/myapp/xxx instead of/xxx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4420866/

相关文章:

0.7.2 的 apache mime4j maven 依赖项

apache - 重定向不适用于 htaccess 中的 mod_rewrite

spring - 在 Tomcat 上的 Eclipse 中使用带有 Hibernate 5 和 Spring 4 的实用程序模块部署复合项目失败

java - 想要添加表单字段并在servlet中获取它

php - 在源服务器上设置 Access-Control-Allow-Origin header

apache - Apache https 代理重定向背后的 Jira

tomcat - https://localhost:8443 在 Tomcat 上工作,但 https://localhost 本身不起作用 - 为什么?

java - 无法通过 Apache Tomcat 连接到 MSSQL DB

java - 如何区分 servlet 中同一页面中的不同超链接?

servlets - 此URL不支持HTTP方法GET