如何从Sinatra中的特定页面重定向网页?

时间:2014-09-24 11:43:51

标签: javascript ruby 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

2 个答案:

答案 0 :(得分:4)

可以通过以下方式检索HTTP引荐来源的信息:

request.referrer

但如果它是由服务器启动的重定向,则它不会被视为目标页面的引用者。简而言之:

如果/ A重定向到/ B,因为服务器告诉客户端页面已移动(状态302),则引用者不是/ A而是链接到/ A或不存在的页面,如果/ A直接请求。

回答这个问题:您必须使用客户端重定向才能让您的想法发挥作用。 Javascript可以做到这一点(置于/ A):

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

答案 1 :(得分:3)

您可以检查引荐来源路径

URI(request.referrer).path

更好的方法是在查询字符串中传递一些参数,您可以根据其存在重定向。