grails - 基于子域的项目和链接

时间:2009-11-19 18:31:45

标签: grails subdomain url-mapping

我正在尝试开发一个具有“root”内容的grails应用程序(例如www.mydomain.com/about),但也将支持基于请求的子域的“项目”;例如myproject.mydomain.com> www.mydomain.com/myproject。作为第一遍,我有以下URL配置:

"/$controller/$action?/$id?" {
 ...
}

"/$project/$controller/$action?/$id?" {
    constraints {
    }
}

到目前为止,主要的缺点是$ project变量必须手动注入每个链接(繁琐而不是DRY):

<g:link controller="foo" action="bar" params="${[project: params.project]}">link</g:link>

有没有办法自动将$ project参数注入所有链接(如果存在),或者有更好的方法来解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

基本上你可以创建一个 grails插件,它会向控制器注入一个新的project param,其值基于自定义TagLib <g:project bean="myproject"/>(例如)

它会强制您在项目的每个gsp页面上定义此tagLib,但它仍然比每个链接都干燥。

希望它有所帮助,

小煜。

答案 1 :(得分:0)

我可以想到几件事。

a)您可以在app-server前放置一个代理(Apache或其他东西)并进行一些URL重写。奖励:这也可以让你做一些静态资源的缓存。

b)这个解决方案在技术上更有趣。您可以根据http主机标头(子域部分)查找项目。这样可以避免重写所有网址,所有Grails约定仍然适用,所以你不应该遇到第三方插件的任何问题,等等。