我目前正在清漆中实施付费专区。在某些情况下,我通过清漆发送重定向:
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.com
到www.paid-content.com/article.html
并超过限制,则后退按钮会将我带回www.website.com
。
这种行为是这样的吗?我应该如何在清漆中重定向以保持浏览器的历史记录?
感谢您的帮助! :)
答案 0 :(得分: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);
}
}
也许一个更优雅的解决方案是显示一个合成页面,解释付费墙已被击中,但这确实是一个偏好问题。