使用铁路由器将裸域重定向到Meteor中的www

时间:2014-05-14 05:32:14

标签: meteor iron-router

我想将为我的网站输入裸域的用户自动重定向到www子域。 Pre-Blaze,这是我使用Iron Router执行此操作的代码:

Router.onBeforeAction(function() {
    var rootDomainRegex = new RegExp(
        '^https:\\/\\/mysite.com',
        'ig'
    );
    if ( window && rootDomainRegex.test( window.location.href ) ) {
        this.stop();
        window.location = window.location.href.replace(
            rootDomainRegex,
            'https://www.mysite.com'
        );
    }
};

当我升级到Meteor 0.8.0和Blaze兼容的Iron Router版本时,这停止了工作。 (我用pause()替换了this.stop(),但这没有帮助。)现在,当您导航到裸域时,页面只会挂起,没有控制台错误。

有没有人有可靠的Blaze兼容方式将用户从裸域重定向到www? (或者这可能不应该在应用程序级别?)

这是我的后Blaze代码。 (这是目前无效的代码。)

Router.onBeforeAction(function(pause) {

    var rootDomainRegex = new RegExp(
        '^https:\\/\\/mysite.com',
        'ig'
    );
    rootDomainRegex.lastIndex = 0;
    if ( window && rootDomainRegex.test( window.location.href ) ) {
        window.location = window.location.href.replace(
            rootDomainRegex,
            'https://www.mysite.com'
        );
        pause();
    }

});

仅使用一些额外信息进行编辑:我刚刚发现,在裸域中,传递给Router.onBeforeAction()的函数根本不会运行。

1 个答案:

答案 0 :(得分:0)

您应该已经粘贴了更新后的代码,您已将其替换为暂停。

我怀疑是否有与您的代码相关的任何内容,它应该正常工作,即使您不打电话暂停也应该重定向。所以这可能是因为你的正则表达式不匹配。

我猜你试图在console.log(rootDomainRegex.test(window.location.href))语句之前调用if并返回true ?!如果你这样做了,那就是原因,第一次调用regex.test时,它匹配返回true,但也会增加正则表达式的lastIndex - 因为g标志,你第二次调用{ {1}}它尝试从该lastIndex匹配并失败,从不执行test部分。

HTH,如果没有,请尝试粘贴您现在无法使用的确切代码。