【问题标题】:Grails urlmappings: Different responses for subdomain and domain root "/" possible?Grails urlmappings:子域和域根“/”的不同响应可能吗?
【发布时间】:2013-09-22 13:43:26
【问题描述】:

我正在开发一个 grails 2.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)。

我必须做什么才能使用户页面子域的“/”下的用户页面正常工作?我需要将我的应用程序拆分为不同的应用程序(插件架构)吗?我应该做这样的事情吗? http://techsravi.blogspot.de/2011/05/managing-multiple-domain-and-sub-domain.html 或者我应该用 Apache2 做一些 url 重写?

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

【问题讨论】:

标签: apache grails mod-rewrite url-mapping


【解决方案1】:

一种解决方案是使用带有 ProxyPass 和 ProxyPassReverse 的 Apache 配置来“重定向”一些 url 到 tomcat 中的另一个,并将其与不同的 VirtualHosts 混合。

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

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

【讨论】:

  • 嗨 Eylen,问题是 grails 生成的 url 始终基于配置 serverName 并显示操作和控制器(我不想要)。是否有可能将 html 中的每个 a-tag href 属性更改或修改为新的基于子域的 url?例如:在 Grails 中,我在 html 内容中有 domain.tld/page/username,但在浏览器的 url 字段中写入的是 username.domain.tld。我希望 html 内容中的链接也被更改,因为我还需要 google 等的干净链接。
  • 嗯,我认为这更难。我想你可以用 Apache mod_rewrite 或类似的东西来管理它(但我对它不是很好,只是一些复制和粘贴示例......)或者,正如你所说,将它们分隔在不同的 grails 应用程序中,每个应用程序都有它自己名字...
【解决方案2】:

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

Wapper

https://gist.github.com/pablomoretti/2267314d3d6ffe000430

过滤器

https://gist.github.com/pablomoretti/24238ef030b8906c9e88

【讨论】:

    【解决方案3】:

    我找到了这个答案Grails and Subdomains,它可能会解决您遇到的问题。

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

    另一个帖子http://fbflex.wordpress.com/2011/08/23/custom-theming-grails-applications/ 也有类似的解决方案,它使用不同的方法来解决他们的问题。其中之一是使用过滤器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      相关资源
      最近更新 更多