我正在尝试开发一个具有“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参数注入所有链接(如果存在),或者有更好的方法来解决这个问题吗?
答案 0 :(得分:1)
基本上你可以创建一个 grails插件,它会向控制器注入一个新的project
param,其值基于自定义TagLib <g:project bean="myproject"/>
(例如)
它会强制您在项目的每个gsp页面上定义此tagLib,但它仍然比每个链接都干燥。
希望它有所帮助,
小煜。
答案 1 :(得分:0)
我可以想到几件事。
a)您可以在app-server前放置一个代理(Apache或其他东西)并进行一些URL重写。奖励:这也可以让你做一些静态资源的缓存。
b)这个解决方案在技术上更有趣。您可以根据http主机标头(子域部分)查找项目。这样可以避免重写所有网址,所有Grails约定仍然适用,所以你不应该遇到第三方插件的任何问题,等等。