有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Tomcat应用程序中将多个域转换为路径

如果我有两个域和两个子域:

examples.com
dogs.tutorials.com
cats.tutorials.com

我想从一台Tomcat服务器将它们作为Java应用程序从以下应用程序入口路径提供服务:

localhost/app/examples/
localhost/app/tutorials/dogs/
localhost/app/tutorials/cats/

例如:

dogs.tutorials.com/search/?f=terrier

应翻译为:

/tutorials/dogs/search/?f=terrier

可以配置Apache或Tomcat来实现这个目标吗?怎么做 我不确定这是否需要apache。这是一个java应用程序,所以apache不应该提供任何内容,只是可以用来将路径转换为域,我不想使用不同的端口,因为这将是一个应用程序。)


共 (2) 个答案

  1. # 1 楼答案

    这也需要实时重写来自服务器的响应,因为您的webapp创建的任何url都会显示/tutorials/dogs/search/?f=terrier,并且必须由Apache前端重写为dogs.tutorials.com/search/?f=terrier

    更新:一个mod_rewritemod_substitution的组合应该能够做到这一点

    出于性能和复杂性的考虑,我不建议使用这种方法

    但是,如果这3个URL实际上是3个不同的Web应用程序,那么你可以使用virtual hosting来实现,其中3个Web应用程序是3个不同虚拟主机的ROOT应用程序

  2. # 2 楼答案

    我用mod_proxymod_substitute解决了:

               
    #required modules
    LoadModule substitute_module modules/mod_substitute.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule proxy_module modules/mod_proxy.so
               
    
    <Location "/">
        AddOutputFilterByType SUBSTITUTE text/html
    </Location>
    
    <VirtualHost *:80>
        ServerName examples.com
        ProxyPreserveHost On
        ProxyPass           / http://localhost:8080/TestWebApp/examples/
        ProxyPassReverse    / http://localhost:8080/TestWebApp/examples/
        Substitute          "s|/TestWebApp/examples||in"
    </VirtualHost>
    
    <VirtualHost *:80>
        ServerName dogs.tutorials.com
        ProxyPreserveHost On
        ProxyPass           / http://localhost:8080/TestWebApp/tutorials/dogs/
        ProxyPassReverse    / http://localhost:8080/TestWebApp/tutorials/dogs/
        Substitute          "s|/TestWebApp/tutorials/dogs||in"
    </VirtualHost>
    
    <VirtualHost *:80>
        ServerName cats.tutorials.com
        ProxyPreserveHost On
        ProxyPass           / http://localhost:8080/TestWebApp/tutorials/cats/
        ProxyPassReverse    / http://localhost:8080/TestWebApp/tutorials/cats/
        Substitute          "s|/TestWebApp/tutorials/cats||in"
    </VirtualHost>
    

    只有在响应页面中也有非相对链接时才需要替换,因此它会替换它们(注意,替换每个匹配的字符串)