有時必須要檢查上一個來的地方。
這裡就必須利用HTTP requests來幫助我們檢查。
假設在我們的sinatra 路由之中
程式如下
require 'sinatra' get "/A" do redirect '/B' end get "/B" do # 如果來自A # "我來自A" # 如果不來自A # "我非來自A 轉向C" # redirect '/C' # end end
我們進入B頁面的時候,會發生判斷來源位置進而導向其他網頁的需求。
因此,我們要利用HTTP request 的 referer 來幫助我們達到這個需求。
在B路由之中,作法如下
get "/B" do if URI(request.referer).path == '/A' "來自A頁面" else redirect '/C' end end
但是會發生一種狀況就是,不管怎麼從A進入,皆會進入C。
原因出在是內部server自動路由A->B 所以request.referer不管如何都是 /
因此皆會進入到C頁面。 代碼為:302 暫時導向
所以如果必須做出這個功能,就必須由Client端來做這方面的導向請求。
在client需求頁面增加的javaScript code如下:
<script type="text/javascript">window.location='/B';</script>
這樣的話就可以成功判斷來自於A的請求至導向B頁面
get "/B" do #這裡必須加入還有經過/ 進入的 mypath = URI(request.referrer || '').path if mypath == '/A' "來自於A" else redirect '/C' end end
參考資料:
1.stackoveflow
2.stackoverflow - 2
沒有留言:
張貼留言