2012-08-01 28 views
1

相對路徑我有一個可以訪問直接作爲http://host.foo.loc:8080/foo/或通過安全反向代理http://www.company.com/apps/foo/獲取Grails的產生在其相對URL

默認情況下,Grails將產生相對路徑相對URL的Web應用程序,例如:

<g:form action="bar"> 

會產生:

<form action="/foo/bar" method="post" > 

這將是本地確定的,但反向代理將ñ OT接受http://www.company.com/foo/bar(它缺少/應用/)

如果我做的:

<g:form action="bar" base="."> 

它的罰款。但我並不想在每一個生成鏈接的標籤上指定它。

處理此問題的最佳方法是讓Grails在其相對URL中生成相對路徑。或者,我可以將全球「baseUrl」設置爲「。」。但我也不知道該怎麼做。

有什麼想法?

實際上,將「base」設置爲「。」。不起作用。第一頁「/ foo/controller/action」會生成鏈接爲「./controller/nextaction」,瀏覽器會將其轉換爲「/ foo/controller/controller/action」=> 404。我想這就是爲什麼他們'重新使用絕對路徑:它們不是路徑。

回答

0

我從來沒有能夠做出這種場景的工作,所以我總是保持代理和unproxied上下文路徑相同,即我會把應用程序在http://host.foo.loc:8080/apps/foo。您可以通過命名WAR文件apps#foo.war來在Tomcat中具有像這樣的多級上下文路徑。

+0

我已經得出同樣的結論。我強迫這些URL是完全絕對的,以便我可以過濾它們,但是有很多地方可能隱藏相對URL,所以這不值得花費精力。我正在切換內部應用程序上下文以匹配外部應用程序上下文,並調整需要調整的內容。 – 2012-08-02 14:00:50

0

grails.app.context = "/foo/bar"添加到您的Config.groovy

+0

'grails.app.context'只適用於'grails run-app'(和'run-war'),它不影響生產部署。在生產環境中,您需要使用由您使用的任何servlet容器提供的機制(例如,對於tomcat,您命名爲WAR'foo#bar.war')。 – 2012-08-01 15:53:06

+0

這是不正確的。有幾個地方會生成絕對路徑,例如CSS和JS導入(grails-resources)和jQuery-AJAX的URL以及以「/」開頭的所有路徑 – Chris 2012-08-01 16:10:33

+0

是的,而且這些路徑基於應用程序部署的上下文路徑。該路徑由開發中的'grails.app.context'設置,但由生產中的容器提供。 – 2012-08-01 16:57:55