2014-12-07 50 views
0

我有一個運行在apache實例後面的tomcat中的應用程序。來自Apache的請求通過mod_rewrite進行代理,因爲這可以在.htaccess中進行配置,並且我無法訪問vhost-configuration(甚至沒有安裝mod_jk)。如何使sprint引導+安全應用程序重定向主機相對

的.htaccess如下所示:

RewriteRule ^/?my-app/(.*)$ http://localhost:8080/my-app/$1 [P] 

Thymeleaf很好地重視上下文名的所有URL,並直通出的HTML,它的工作產生相對的像/my-app/relative/path(所以沒有http://hostname -part)在這個設置完美。

不幸的是,只要我使用Spring MVC的重定向東西...

@RequestMapping("/redirect-to-relative-path") 
public String redirect() { 
    return "redirect:/relative/path"; 
} 

...用戶重定向到http://localhost:8080/my-app/relative/path,而不是僅僅/my-app/relative/path,不會對外界用戶的工作。

此外,Spring Security將尚未授權的用戶重定向到http://localhost:8080/my-app/login而不僅僅是/my-app/login

我知道我可以使用完整的URL重定向到,但這應該是動態的。

什麼是使框架重定向到相對URL而不是附加主機名的最佳方式(spring-boot-)? (...基本上像Thymeleaf這樣做)

回答

0

該協議標準規定重定向URL應該(必須)是絕對的。

嘗試在你的Tomcat配置設置proxyNameproxyPort

<Connector port="8080" ... proxyName="www.mycompany.com" proxyPort="80"/> 

這些應該是Apache實例的公共屬性。

+0

謝謝!好點子。嘗試proxyName/-Port本地,並可以確認它的工作原理。不過,由於我不允許更改apache配置,因此我害怕在該目標框中,我也不允許更改server.xml。 Re:協議標準[Wikipedia](http://en.wikipedia.org/wiki/HTTP_location)指出:「過時的HTTP 1.1規範版本(IETF RFC 2616)需要一個完整的絕對URI重定向。[..]大多數流行的Web瀏覽器都容忍相對URL的傳遞,並因此允許更新的HTTP 1.1規範(IETF RFC 7231)[..]允許在位置標頭中使用相對URL。「 – 2014-12-08 10:26:02

相關問題