【问题标题】:How to redirect web page from a specfic page in Sinatra?如何从 Sinatra 中的特定页面重定向网页?
【发布时间】:2014-09-24 22:45:22
【问题描述】:

在 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 中完成?


我试过这个,但它保持 null ,

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

【问题讨论】:

  • 感谢您的编辑!下次我会注意到的。

标签: javascript ruby sinatra


【解决方案1】:

HTTP referrer 的信息可以通过以下方式获取:

request.referrer

但如果是服务器发起的重定向,则不算作目标页面的referrer。简而言之:

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

要回答这个问题:您必须使用客户端重定向才能使您的想法发挥作用。 Javascript 可以解决问题(放在 /A 上):

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

【讨论】:

    【解决方案2】:

    您可以检查引用路径

    URI(request.referrer).path
    

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

    【讨论】:

    • 我在 if-else 语句中尝试过 request.referer == "/A" ,但没有成功。如何解决?谢谢。
    • 我检查了 request.referrer ,它是空的。
    • 你应该从referrer中提取路径。编辑了答案。除非您重新加载同一页面,否则它不应为 nil。
    • 我试过你的答案,但是当引用页面是/A时它仍然是零。我不知道为什么。它不断在代码中重定向到 C。我编辑了我的问题。
    • 也感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2013-06-12
    • 1970-01-01
    相关资源
    最近更新 更多