2015-05-13 11 views
1
if 'HTTP_REFERER' in request.META and 'mysite.com' not in request.META['HTTP_REFERER'] or 'HTTP_REFERER' not in request.META: 
    return redirect('/') 

如果HTTP_REFERER是存在的,如果它亙古不包含mysite.com或者如果不給HTTP_REFERER,它應該重定向到起始頁。Django的醒目的HTTP Referer的並不總是工作

我的代碼部署在7個服務器上,通過loadbalancer進行調度,所有這7個服務器中的代碼都是最新的。但仍然只是有時候,這個重定向不起作用。

我可能會做錯什麼?

的情況下,如果它不工作:

一個商業社區 - 會員發表了關於我的網頁新聞和我的網頁粘貼深層鏈接。我點擊了該鏈接,但沒有重定向。我驚訝地檢查了我的代碼,一切正常,並再次點擊鏈接和賓果遊戲,這次它確實將我重定向到首頁。我很高興,我認爲這可能是一個緩存或smthg。但後來,我點擊鏈接,重定向沒有再次工作。然後發佈了這個問題。該情況與瀏覽器類型和版本無關。

+0

你有沒有工作的案例的例子? –

+0

鏈接上是否存在可能影響請求的JavaScript單擊事件?這個代碼是否在你的項目中的所有視圖上被調用? –

回答

2

首先,該代碼可以縮短得:

if 'mysite.com' not in request.META.get('HTTP_REFERER', ''): 
    return redirect('/') 

其次,HTTP_REFERER不能保證存在。這可能只是用戶正在使用書籤,或者瀏覽器自動完成,這意味着HTTP_REFERER可能會或可能不會出現在您正在測試的案例中。

如果使用書籤的網站的有效用戶將被重定向。同樣,從somedomain.com/mysite.com轉介的無效用戶將被重定向。在這種情況下,在檢查引用者時最好使用startwith()。沒有更好的方法可以管理你正在做的事情。

也許你可以用更多的上下文更新問題。我會盡我所能幫助你。

+0

感謝您的熱情幫助。如果http_referer不存在,我將在更多的上下文/使用案例 – doniyor

+0

中稍後更新我的問題,那麼它應該重定向。這很奇怪.. – doniyor