2013-09-22 35 views
0

我正在使用grails 2.2.3應用程序。這個應用程序有一個後端,一個營銷網站和一些用戶頁面。Grails urlmappings:對子域和域根「/」可能有不同的響應?

每個用戶頁面應該可以通過username.domain.tld獲得,這是通過domain.tld和www.domain.tld的營銷網站,以及通過domain.tld/backend或backend.domain.tld的後端。

我已經實現了這些部分的每一個,但我的問題是,我只有一個「/」URLMapping。如果我打電話給市場營銷網站,我會將營銷視圖作爲迴應。如果我打電話給username.domain.tld,我也會得到營銷網站作爲迴應,但我希望我得到/用戶/頁面作爲迴應。使用username.domain.tld/user/page我得到了給定用戶的正確響應(我有一個過濾器檢查域名的http頭並將子域名設置爲params.username)。

我需要做些什麼來獲取userpage子域的「/」下的用戶頁面?我是否需要將我的應用分成不同的應用(插件架構)?我應該這樣做嗎? http://techsravi.blogspot.de/2011/05/managing-multiple-domain-and-sub-domain.html或者我應該用Apache2做一些URL重寫?

什麼是對我的問題最好最乾淨的解決方案?

+0

[Grails and Subdomains]的可能重複(http://stackoverflow.com/questions/9242527/grails-and-subdomains) – Ramsharan

回答

1

一個解決方案是使用Apache配置與ProxyPass和ProxyPassReverse在tomcat中「重定向」某個url到另一個,將其與不同的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> 

我沒有測試過這正是,但在其他類似的情況它的工作原理,我們用了很多在這裏...

+0

嗨Eylen,問題是,網址的grails生成總是基於配置serverName和顯示動作和控制器(我不想)。是否有可能改變或修改html中的每個a-tag href屬性到基於新的子域的url?例如:在Grails中,我在html內容中有domain.tld/page/username,但在瀏覽器中,url字段被寫入username.domain.tld。我希望html內容中的鏈接也因爲我也需要清理google等鏈接而發生變化。 – whitenexx

+0

mmm,我覺得這很難。我想你可以用Apache mod_rewrite或類似的工具(但我對它不太好,只是一些複製和粘貼的例子......),或者如你所說,將它們分開放在不同的grails應用程序中,每個應用程序都有它自己的名稱... – Eylen