2014-09-24 2 views
0

В 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 для выполнения того, что я хочу сделать?

Или это должно быть сделано в Синатре?


Я попытался это, но он держит пустой,

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

Спасибо за ваше редактирование! Замечу, что в следующий раз. –

ответ

4

Информация о HTTP реферер может быть получен с помощью:

request.referrer 

Но если это редирект инициируется сервером, он не считается реферера на целевой странице. В короткие сроки:

Если/A перенаправляет/B, поскольку сервер сказал клиенту, что страница перемещена (статус 302), реферер не является/A, а страница, связанная с/A или ничего, если/A получена запрашивается напрямую.

Чтобы ответить на вопрос: вам нужно использовать перенаправление на стороне клиента, чтобы ваша идея работала. Javascript может сделать трюк (помещен на/A):

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

Спасибо за ваш ответ! Это действительно работает. –

3

Вы можете проверить на пути ссылающейся сделать так

URI(request.referrer).path 

Лучше бы передать некоторые параметры в строку запроса, и вы можете перенаправить ее на основе ее присутствия.

+0

Я пробовал request.referer == "/ A" в инструкции if-else, но это не сработало. Как это исправить? Благодарю. –

+0

Я проверяю request.referrer, он равен нулю. –

+0

Вы должны извлечь путь из реферера. Отредактировал ответ. Это не должно быть nil, если вы не перезагружаете одну и ту же страницу. –

Смежные вопросы