Apache Grails urlmappings:子域和域根的不同响应/&引用;可能的

Apache Grails urlmappings:子域和域根的不同响应/&引用;可能的,apache,grails,mod-rewrite,url-mapping,Apache,Grails,Mod Rewrite,Url Mapping,我正在开发Grails2.2.3应用程序。此应用程序有一个后端、一个营销站点和一些用户页面 每个用户页都应通过username.domain.tld、domain.tld和www.domain.tld上的营销网站以及domain.tld/backend或backend.domain.tld上的后端可用 我已经实现了每个部分,但我的问题是我只有一个“/”的URLMapping。如果我打电话给营销网站,我会得到营销视图作为回应。如果我调用username.domain.tld,我也会得到营销站点作为

我正在开发Grails2.2.3应用程序。此应用程序有一个后端、一个营销站点和一些用户页面

每个用户页都应通过username.domain.tld、domain.tld和www.domain.tld上的营销网站以及domain.tld/backend或backend.domain.tld上的后端可用

我已经实现了每个部分,但我的问题是我只有一个“/”的URLMapping。如果我打电话给营销网站,我会得到营销视图作为回应。如果我调用username.domain.tld,我也会得到营销站点作为响应,但我希望得到/user/page作为响应。使用username.domain.tld/user/page,我得到了给定用户的正确响应(我有一个过滤器,它检查http头中的域名,并将子域名设置为params.username)

要使userpage子域“/”下的userpage正常工作,我必须做什么?我是否需要将我的应用程序拆分为不同的应用程序(插件架构)?我应该那样做吗?或者我应该用Apache2重写一些url吗


对于我的问题,什么是最好、最干净的解决方案?

一种解决方案是使用Apache配置和ProxyPass和ProxyPassReverse在tomcat内将一些url“重定向”到另一个url,并将其与不同的虚拟主机混合使用

<VirtualHost *:80>
    ServerName username.domain.tld
    ProxyPass / http://mycomputer:8080/user
    ProxyPassReverse / http://mycomputer:8080/user
</VirtualHost>
<VirtualHost *:80>
    ServerName www.domain.tld
    ProxyPass / http://mycomputer:8080/
    ProxyPassReverse / http://mycomputer:8080/
</VirtualHost>
<VirtualHost *:80>
    ServerName backend.domain.tld
    ProxyPass / http://mycomputer:8080/backend
    ProxyPassReverse / http://mycomputer:8080/backend
</VirtualHost>

ServerName username.domain.tld
ProxyPass/http://mycomputer:8080/user
ProxyPassReverse/http://mycomputer:8080/user
服务器名www.domain.tld
ProxyPass/http://mycomputer:8080/
ProxyPassReverse/http://mycomputer:8080/
ServerName backend.domain.tld
ProxyPass/http://mycomputer:8080/backend
ProxyPassReverse/http://mycomputer:8080/backend

我还没有完全测试过它,但是在其他类似的情况下它可以工作,我们在这里经常使用它…

一个解决方案是使用一个带有java过滤器的请求包装器

Wapper

过滤器

我找到了这个答案,可以解决你的问题

它有子域的解决方案,每个用户名都需要这个解决方案。为此,它使用了过滤器


另一个帖子也有类似的解决方案,使用不同的方法来解决他们的问题。其中之一是使用过滤器。

Hi Eylen,问题是grails生成的URL总是基于配置服务器名,并显示操作和控制器(我不想要)。是否也可以将html中的每个a-tag href属性更改或修改为新的基于子域的url?例如:在Grails中,我在html内容中有domain.tld/page/username,但在浏览器url字段中写的是username.domain.tld。我希望html内容中的链接也被更改,因为我还需要谷歌等的干净链接。嗯,我认为这更难。我想您可以使用Apache mod_rewrite或类似工具来管理它(但我不太擅长,只是一些复制粘贴示例…),或者,正如您所说,在不同的grails应用程序中将它们分开,每个应用程序都有自己的名称…可能是