2014-09-24 89 views
0

在Sinatra中,如何從特定頁面重定向網頁?如何從Sinatra的特定頁面重定向網頁?

require 'sinatra' 

get "/A" do 
    redirect '/B' 
end 

get "/B" do 
    # if comes from A 
    #  "IT COMES FROM A"  
    # else not from A 
    #  "NOT FROM A , REDIRECT TO C" 
    #  redirect '/C' 
    # end 
end 

我想學習如何做到這一點?

我可以使用JavaScript或HTML來做我想做的事嗎?

或者,它必須在Sinatra完成?


我想這一點,但它一直空,

get "/B" do 
    mypath = URI(request.referer || '').path 
    if mypath == '/A' 
     "hi i am b , u come from a" 
    else 
     "--#{request.referrer}--" 
     redirect '/C' 
    end 
end 
+0

感謝您的編輯!下次我會注意到。 – 2014-09-24 12:07:31

回答

4

的HTTP引用的信息可以通過檢索:

request.referrer 

但如果是由服務器發起的重定向,它不計入引薦到目標頁面。簡而言之:

如果因爲服務器告訴客戶端頁面已經移動(狀態302),/ A重定向到/ B,則引用者不是/ A,而是鏈接到/ A或者沒有鏈接的頁面,如果/ A有直接要求。

要回答這個問題:您必須使用客戶端重定向爲了讓您的想法工作。 Javascript可以做到這一點(置於/ A):

<script type="text/javascript">window.location = '/B';</script> 
+0

感謝您的回答!它確實有效。 – 2014-09-24 15:03:20

3

您可以檢查引薦路徑這樣做

URI(request.referrer).path 

更好的方法是通過在一些參數查詢字符串,你可以根據它的存在重定向。

+0

我已經在我的if-else語句中嘗試了request.referer ==「/ A」,但它不起作用。如何解決它?謝謝。 – 2014-09-24 12:24:04

+0

我檢查request.referrer,它是空的。 – 2014-09-24 12:29:57

+0

您應該從引薦來源中提取路徑。編輯答案。它不應該是零,除非你重新加載相同的頁面。 – 2014-09-24 12:38:41