Meteor Iron Router Catch-All 301 Redirect

时间:2015-02-06 07:29:12

标签: redirect meteor iron-router

我正在将应用从网站的根域迁移到子域。根域上的新应用程序是用Meteor编写的,并使用铁路由器。为了避免破坏外部链接,我想301将meteor应用程序未处理的所有URL重定向到子域。

我似乎无法弄清楚如何使用铁路由器做到这一点。由于我正在进行301重定向,因此它是一个服务器路由(通过{where:' server'})但是当我这样做时,catchall路由优先于所有其他现有路由,即使它是在我的路线文件中进一步定义。

版本:

Meteor 1.0.3.1

铁:路由器1.0.7

Router.route('/', function () {
  this.render('home');
});
Router.route('/about', function () {
  this.render('about');
});

// Takes precedence over all above routes (due to server?)
Router.route('/(.*)', function () {
  this.response.writeHead(301, {'Location': 'https://subdomain.thedomain.com/' + this.params[0]});
  this.response.end();    
}, {where: 'server'});

2 个答案:

答案 0 :(得分:2)

我认为你的路线模式是错误的。请尝试以下模式:

Router.route('/:path?', function () {
  this.response.writeHead(301, {'Location': 'https://subdomain.thedomain.com/' + this.params.path});
  this.response.end();    
}, {where: 'server'});

?表示参数是可选的。

答案 1 :(得分:0)

看起来这是实现目标的更好方法:

WebApp.connectHandlers
  .use('/url_to_redirect', function(req, res, next) {
    // 301 Moved Permanently
    res.writeHead(301, {
      'Location': '/url_where_we_want_to_go'
   });
    res.end();
  });

有关此内容的更多信息:http://meteorpedia.com/read/HTTP_Redirects