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.com私が制限から来て制限を超えていると仮定するとwww.paid-content.com/article.html、戻るボタンでに戻りますwww.website.com

この動作はこのように意図されていますか?ブラウザの履歴を保持するには、ニス内でどのようにリダイレクトする必要がありますか?

ご協力いただきありがとうございます!:)

4

1 に答える 1

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);
    }
}

おそらく、より洗練された解決策は、ペイウォールに達したことを説明する合成ページを表示することですが、それは実際には好みの問題です.

于 2012-11-15T11:14:12.247 に答える