2012-11-01 54 views
0

我目前正在清漆中實施付費牆。在某些情況下,我通過清漆發送重定向:通過清漆發送重定向後,瀏覽器丟失歷史記錄

sub process_request { 
    if (req.http.count ~ "5") { 
     error 302; 
    } 
} 

在相應的錯誤子程序我重定向這樣的:

sub paywall_redirect { 
    if (obj.status == 302 && req.http.count ~ "5") { 
     set obj.http.Location = "http://www.google.com/"; 
    } 
} 

幸運的是邏輯的作品,但我很遺憾失去瀏覽器歷史記錄在重定向到google.com之前使用的域。

比方說,我創建了一個新選項卡,打開www.paid-content.com/article.html我想讀取並超出計數器限制(例如通過重新加載頁面)的某篇文章。然後我重定向到www.google.com,瀏覽器後退按鈕被禁用。

假設我從www.website.comwww.paid-content.com/article.html來到並超過限制,那麼後退按鈕將我帶回www.website.com

這種行爲是這樣的嗎?我應該如何在清漆中重定向以保持瀏覽器的歷史記錄?

感謝您的幫助! :)

回答

0

這確實是打算的行爲。實質上,您正在告訴瀏覽器www.paid-content.com/article.html現在位於www.google.com。瀏覽器會緩存這些信息,並影響歷史記錄。

完成重定向的最佳方式是通過自定義錯誤處理程序。

sub process_request { 
    if (req.http.count ~ "5") { 
     error 750; 
    } 
} 

然後在您的自定義錯誤處理程序中創建一個帶有元刷新標記的合成響應主體。即使是元刷新也有缺點,但它應該以您想要的方式保留瀏覽歷史記錄。

sub paywall_redirect { 
    if (obj.status == 750 && req.http.count ~ "5") { 
     set obj.http.Content-Type = "text/html; charset=utf-8"; 
     synthetic {" 
      <html> 
      <head> 
       <meta http-equiv="refresh" content="0;URL='http://www.google.com/'"> 
      </head> 
      <body></body> 
      </html> 
     "}; 
     return(deliver); 
    } 
} 

也許更優雅的解決辦法是顯示合成頁解釋說,付費牆,一直打到,但是這是真的喜好的問題。