如何从Sinatra的特定页面重定向网页?
在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引用的信息可以通过检索:
request.referrer
但如果是由服务器发起的重定向,它不计入引荐到目标页面。简而言之:
如果因为服务器告诉客户端页面已经移动(状态302),/ A重定向到/ B,则引用者不是/ A,而是链接到/ A或者没有链接的页面,如果/ A有直接要求。
要回答这个问题:您必须使用客户端重定向为了让您的想法工作。 Javascript可以做到这一点(置于/ A):
<script type="text/javascript">window.location = '/B';</script>
感谢您的回答!它确实有效。 – 2014-09-24 15:03:20
您可以检查引荐路径这样做
URI(request.referrer).path
更好的方法是通过在一些参数查询字符串,你可以根据它的存在重定向。
我已经在我的if-else语句中尝试了request.referer ==“/ A”,但它不起作用。如何解决它?谢谢。 – 2014-09-24 12:24:04
我检查request.referrer,它是空的。 – 2014-09-24 12:29:57
您应该从引荐来源中提取路径。编辑答案。它不应该是零,除非你重新加载相同的页面。 – 2014-09-24 12:38:41
感谢您的编辑!下次我会注意到。 – 2014-09-24 12:07:31