【问题标题】:Conditional Cached Page Redirect条件缓存页面重定向
【发布时间】:2016-04-11 01:37:08
【问题描述】:

我正在尝试根据网站查看者的选择设置有条件的缓存重定向。

这是我希望如何拥有网站功能的示例(您可以访问 vonage.com 进行测试):

当我访问 www.vonage.com 时,我可以在“个人、小型企业、中型市场和企业”之间进行选择。

做出选择后,您将被转到相关的网站/子域 - vonage.com、personal.vonage.com 或 enterprise.vonage.com。

然后,如果您尝试返回带有选项的初始页面,您将无法返回,您将被重定向回您已经做出的选择。

这是怎么做到的?我想实现类似的东西。顺便说一句,我正在使用 Wordpress,但这可能无关紧要,我可以在代码或 .htaccess 中弄脏我的手。

【问题讨论】:

    标签: javascript php wordpress browser-cache url-redirection


    【解决方案1】:

    可能有更好的方法,这只是 java-script 而不是 php,但 cookie 应该可以解决问题。

    在页面加载时检查 cookie 是否存在,如果它重定向,如果不重定向:

    if (document.cookie.indexOf("home") >= 0) {
     // redirect them to home
    }
    else if (document.cookie.indexOf("business") >= 0) {
     // redirect them to business
    }
    else if (document.cookie.indexOf("enterprise") >= 0) {
     // redirect them to enterprise
    }
    

    如果这些都没有触发,并且用户在选择选项时没有被重定向,则设置他们的 cookie,例如:

    // set a new cookie
    expiry = new Date();
    expiry.setTime(date.getTime()+(10*60*1000)); // Ten minutes
    
    // Date()'s toGMTSting() method will format the date correctly for a cookie
    document.cookie = "business; expires=" + expiry.toGMTString();
    

    【讨论】:

    • 这是有道理的。我会尝试一下。谢谢。
    • 如果您遇到任何问题,请告诉我,可能还想提高数学以使其持续时间超过 10 分钟。
    • Cookie 可能是最好的方法,但可能值得在 WordPress 路由级别将此逻辑转移到 php,而不是等待浏览器层加载然后执行此逻辑
    【解决方案2】:
    (function(href, referrer) {
        var enterprise = "http://enterprise.mysite.com" 
        var personal = "http://personal.mysite.com" 
    
        var is_enterprise = new RegExp(enterprise).test(href)
        var is_personal = new RegExp(personal).test(href)
    
        var cache = readCookie('portal')
        if (cache) return location.href = cache
    
        var portal = is_enterprise || is_personal
        if (portal) document.cookie = "portal=" + (enterprise || personal) + "; expires=Fri, 31 Dec 9999 23:59:59 GMT";
    
        return null
    })(location.href, document.referrer)
    
    
    function readCookie(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++) {
            var c = ca[i];
            while (c.charAt(0)==' ') c = c.substring(1,c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
        }
        return null;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-06
      • 2019-05-10
      • 1970-01-01
      • 2011-09-04
      • 2015-04-12
      • 1970-01-01
      • 2013-03-11
      • 2011-09-26
      • 1970-01-01
      相关资源
      最近更新 更多