如何使用Express重定向所有不匹配的URL?

时间:2013-05-19 17:26:37

标签: node.js express

我想将所有不匹配的网址重定向到我的主页。 IE浏览器。有人转到www.mysite.com/blah/blah/blah/foo/barwww.mysite.com/invalid_url - 我想将其重定向到www.mysite.com

显然,我不想干涉我的有效网址。

那么我是否可以使用一些通配符匹配器将请求重定向到这些无效的URL?

3 个答案:

答案 0 :(得分:32)

在其余路线的末尾添加路线。

app.all('*', function(req, res) {
  res.redirect("http://www.mysite.com/");
});

答案 1 :(得分:20)

您可以在Express链中插入'catch all'中间件作为最后的中间件/路由:

//configure the order of operations for request handlers:
app.configure(function(){
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.cookieParser());
  app.use(express.static(__dirname+'/assets'));  // try to serve static files
  app.use(app.router);                           // try to match req with a route
  app.use(redirectUnmatched);                    // redirect if nothing else sent a response
});

function redirectUnmatched(req, res) {
  res.redirect("http://www.mysite.com/");
}

...

// your routes
app.get('/', function(req, res) { ... });
...

// start listening
app.listen(3000);

我使用此类设置生成自定义404 Not Found页面。

答案 2 :(得分:1)

我在这里很早,但这是我对此的解决方案

app.get('/', (req, res) => {
    res.render('index')
})

app.get('*', (req, res) => {
    res.redirect('/')
})

只需使用路由顺序重定向1个特定的url,然后它才能为所有其他内容提供所有路由。您可以将所有想要的路线放在全包之上,这将是您的最佳选择。

我的示例只是将重定向和url重定向到同一根页面