2014-09-24 1 views
0

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 
+0

감사합니다. 나는 다음에 그것을 알아 차릴 것이다. –

답변

4

는 HTTP 리퍼러의 정보를 통해 검색 할 수 있습니다

request.referrer 

그러나이 서버에 의해 시작 리디렉션 인 경우는 대상 페이지에 대한 참조 페이지로 계산하지 않습니다. 간단히 말해서 :

서버가 클라이언트에게 페이지 이동 (상태 302)을했기 때문에/B가/B로 리디렉션되면 리퍼러는/A가 아니고/A에 링크 된 페이지 또는/A가 있으면 직접 요청했다.

질문에 대답하려면 : 아이디어를 얻으려면 클라이언트 쪽 리디렉션을 사용해야합니다. Javascript가 트릭을 수행 할 수 있습니다 (/ A에 배치).

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

답변 해 주셔서 감사합니다! 그것은 정말로 효과가 있습니다. –

3


나는이 시도하지만 널 계속

는 몇 가지 매개 변수를 전달하는 것입니다 그래서

URI(request.referrer).path 

더 나은 접근을 할 수 쿼리 문자열을 표시하고 해당 존재 여부에 따라 리디렉션 할 수 있습니다.

+0

if-else 문에서 request.referer == "/ A"를 시도했지만 작동하지 않았습니다. 그것을 고치는 방법? 감사. –

+0

request.referrer를 확인하면 null입니다. –

+0

리퍼러에서 경로를 추출해야합니다. 답변을 수정했습니다. 동일한 페이지를 다시로드하지 않는 한,이 값은 0이 아니어야합니다. –

관련 문제