【发布时间】:2013-11-18 07:38:43
【问题描述】:
我们将 Web 应用程序从 http://domain.tld/webapp/... 移动(或重命名)到 http://domain.tld/ourWebapp/...
现在我们想将旧网址重定向到新网址 - 大多数重定向解决方案都是在应用程序内部处理的。然而这不起作用,因为给出了错误的战争名称,webapp 根本不会被触发。
有没有办法在服务器级别添加重定向,而不是在应用程序中处理它? (我们不想部署监听旧战争名称的“重定向应用程序”。)
我找到了这个文档:http://www.jboss.org/jbossweb/modules/rewrite.html,但它似乎已经过时了,因为它仍然在谈论 server.xml(JBOSS AS 7.1 中没有)。所有提到的元素也不存在并且似乎不受支持......
经过大量测试,我发现这可以在standalone.xml 中,就在虚拟服务器子系统中。但是,仍然存在一些问题:
到目前为止的工作情况:以下条目按预期导致前锋:
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
<virtual-server name="default-host" enable-welcome-root="true">
<alias name="localhost"/>
<rewrite pattern="^/webapp/(.*?)$" substitution="/myWebapp/$1" flags="R=301,L">
</rewrite>
</virtual-server>
</subsystem>
使用 jboss (http://www.jboss.org/jbossweb/modules/rewrite.html) 进行重写的(过时的)文档指出,有几个可以使用的环境变量。
我注意到,${HTTP_} 变量正在工作,但使用其他任何东西都会给我一个“java.lang.IllegalArgumentException”。
我尝试过的(以及需要实现的):
<rewrite pattern="^/webapp/(.*?)$" substitution="${SERVER_PROTOCOL}://${SERVER_ADDR}:${SERVER_PORT}/myWebapp/$1" flags="R=301,L">
所以基本上是一个独立于协议和/或主机名的重定向。
我尝试使用“相对”重定向 (substitution="/myWebapp/$1") - 这有效,但 不 保留端口(@987654330@ 上的请求被转发到 http://ip/myWebapp/)
对此有什么想法吗?
【问题讨论】: