我想将为我的网站输入裸域的用户自动重定向到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()
的函数根本不会运行。
答案 0 :(得分:0)
您应该已经粘贴了更新后的代码,您已将其替换为暂停。
我怀疑是否有与您的代码相关的任何内容,它应该正常工作,即使您不打电话暂停也应该重定向。所以这可能是因为你的正则表达式不匹配。
我猜你试图在console.log(rootDomainRegex.test(window.location.href))
语句之前调用if
并返回true
?!如果你这样做了,那就是原因,第一次调用regex.test时,它匹配返回true,但也会增加正则表达式的lastIndex - 因为g
标志,你第二次调用{ {1}}它尝试从该lastIndex匹配并失败,从不执行test
部分。
HTH,如果没有,请尝试粘贴您现在无法使用的确切代码。