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

2022-03-29 00:00:00 ruby javascript 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

解决方案

Http Referrer信息可通过:

request.referrer

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

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

回答这个问题:您必须使用客户端重定向来实现您的想法。JavaScript可以做到这一点(放在/A上):

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

相关文章