我們的Rails 4應用程序需要通過一個陳舊的門戶進行訪問。該門戶通過爲每個URL添加(從瀏覽器的角度來看)一個前綴;該前綴在將請求轉發給我的應用程序之前由門戶刪除。爲生成的鏈接添加前綴,但不添加到傳入路由
所以瀏覽器調用https://portal.company.com/portal/prefix/xyzzy/myapp/mymodel/new
;門戶網站做它的事情,並要求https://myserver.company.com/myapp/mymodel/new
(以不相關的方式傳遞剝離的前綴)。前綴是動態的,可以在請求之間改變。
問題是,門戶網站無法重寫我的應用程序提供的HTML頁面。也就是說,它沒有放在前綴中。它期望應用程序只發出相對URL,或者自己添加門戶前綴。
所以:
- 定期URL
/myapp/mymodel/new
,例如,必須保持原樣當應用程序直接訪問的(對於不使用門戶特定用戶)。 - 當通過門戶訪問時,我們的應用程序仍然必須像往常一樣瞭解
/myapp/mymodel/new
,但使用mymodel_new_path
或link_to @mymodel
或form_for @my_model
或任何其他魔術URL生成器時,它必須添加門戶前綴。因此,應用程序發出的任何URL必須看起來像/portal/prefix/xyzzy/myapp/mymodel/new
,其中每個請求字符串/portal/prefix/xyzzy
由我們定義的某種方法給出(部分xyzzy
可以在請求之間更改)。
我該如何做到這一點?我routes.rb
看起來今天這個樣子:
MyApp::application.routes.draw do
scope ' /myapp' do
get ...
這可能必須原封不動,因爲在傳入的請求的URL從門戶何時到來不會改變。但是,我如何影響傳出的網址?
如果請求來自門戶 –
@ArkadiuszOleksy,您可以編寫簡單的中間件來將前綴追加到所有相對路徑,您的意思是它會沿着'html.gsub!(/ myurlroot /,「portalprefix/myurlroot 「是的,我有這個想法,它應該很簡單,但是希望能夠解決問題的根源而不需要重寫。如果沒有其他問題出現,我會記住這一點。 – AnoE