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

时间:2016-05-27 22:30:16

标签: java apache tomcat url-routing

如果我有2个域名和2个子域名:

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 个答案:

答案 0 :(得分:0)

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

更新mod_rewritemod_substitution的组合应该能够实现。

出于性能和复杂性的原因,我不建议这样做。

但是,如果3个网址实际上是3个不同的网络应用,那么您可以使用virtual hosting执行此操作,其中3个网络应用是3个不同虚拟主机的ROOT个应用。

答案 1 :(得分:0)

我解决了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>

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