【问题标题】:JBoss AS 7.1 Server Level RedirectJBoss AS 7.1 服务器级重定向
【发布时间】: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") - 这有效,但 保留端口(@98​​7654330@ 上的请求被转发到 http://ip/myWebapp/

对此有什么想法吗?

【问题讨论】:

    标签: redirect jboss7.x


    【解决方案1】:

    终于明白了:

    <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>
    

    按预期工作并保持端口。 (不知道,为什么它在第一次尝试时不起作用,可能没有正确重启服务器等等......)

    【讨论】:

      【解决方案2】:

      如果您可以访问 RedHat 网站,这里也有一些解释和示例:

      https://access.redhat.com/site/solutions/189423


      JBoss EAP6 提供了全局重写阀,可以在配置的“web”子系统中启用,如下所示: 为了重定向所有来自 localhost:8080/MXBeanDemo 的 http 请求,应该重定向到“www.yahoo.com/”

          <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"/>
                  <alias name="example.com"/>
                  <rewrite pattern="^/MXBeanDemo(.*)" substitution="http://www.yahoo.com" flags="R"/>   <!-- NOTICE -->
              </virtual-server>
          </subsystem>
      

      用于将 localhost:8080/Abcd 重定向到 localhost:8080/Wxyz

          <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"/>
                  <alias name="example.com"/>
                  <rewrite pattern="^/Abcd(.*)" substitution="/Wxyz" flags="R"/>   <!-- NOTICE -->
              </virtual-server>
          </subsystem>
      

      【讨论】:

        猜你喜欢
        • 2014-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-11
        • 2021-02-22
        • 1970-01-01
        • 2013-05-11
        • 1970-01-01
        相关资源
        最近更新 更多