2014-09-24 69 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