2015-07-13 86 views
0

我有一個負責代理HTTP調用其他服務的控制器。在我routes.rb我曾與一些嘗試這樣的:Rails路由和正則表達式

get '/:service/:request', service: /servicefoo|servicebar|serviceomg/, 
    request: /(?:(servicefoo|servicebar|serviceomg))(.*)/, 
    to: 'proxy#show' 

或也是這樣:

get '/:service/:request', constraints: { 
    service: /servicefoo|servicebar|serviceomg/, 
    request: /(?:(servicefoo|servicebar|serviceomg))(.*)/ 
}, to: 'proxy#show' 

,也...

get '/:service/:request', service: /passport|tiptop|datacubes/, 
    request: /(.*)/, 
    to: 'proxy#show' 

看來,正則表達式是工作時我在網上查詢:https://regex101.com/r/xX5kP6/3

但是在Rails中,一旦我在我的控制之下只有params[:request]只包含admin/users和其餘的請求已被刪除...所以我不能正常中繼完整的HTTP請求按預期。

背後發生了什麼?

謝謝。

回答

2

我不確定這些路線是否支持正則表達式,而您正在使用它們。您只能使用水珠(http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments

你可以嘗試重新加工您的代碼以使用約束對象:

# From the Rails guides 

class BlacklistConstraint 
    def initialize 
    @ips = Blacklist.retrieve_ips 
    end 

    def matches?(request) 
    @ips.include?(request.remote_ip) 
    end 
end 

Rails.application.routes.draw do 
    get '*path', to: 'blacklist#index', 
    constraints: BlacklistConstraint.new 
end 
+0

我認爲,正則表達式都OK,但是的鋼軌只考慮後面''一切作爲參數來分析? ... :( – Mich