2013-05-19 22 views
15

Tôi muốn chuyển hướng tất cả các url chưa được so khớp đến trang chủ của mình. I E. ai đó truy cập vào www.mysite.com/blah/blah/blah/foo/bar hoặc www.mysite.com/invalid_url - Tôi muốn chuyển hướng họ đến www.mysite.comLàm cách nào để chuyển hướng tất cả các url chưa khớp với Express?

Rõ ràng là tôi không muốn can thiệp vào các url hợp lệ của mình.

Vì vậy, có một số đối sánh ký tự đại diện mà tôi có thể sử dụng để chuyển hướng các yêu cầu đến các url không hợp lệ này?

Trả lời

15

Bạn có thể chèn một 'bắt tất cả' middleware như middleware cuối cùng/tuyến đường trong chuỗi Express của bạn:

//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); 

tôi sử dụng một thiết lập như vậy để tạo ra một tùy chỉnh trang 404 Not Found.

+0

Tôi biết bạn biết điều này nhưng bạn có thể muốn hiển thị cấu trúc phân cấp trong cấu hình nhanh để chúng có được thứ tự đúng. Chỉ là một gợi ý. – origin1tech

+0

@ C.Hazelton đó là lý do tôi đưa vào nhận xét. Không đủ rõ ràng? Tôi rất vui được thêm nhiều hơn nữa :) – robertklep

+0

đã được nói là trái ngược với ý kiến ​​chỉ là một gợi ý. – origin1tech

24

Thêm tuyến đường ở cuối phần còn lại của tuyến đường.

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

Tôi không biết bạn có thể sử dụng "tất cả". Câu trả lời tốt. – Riwels

+3

Nếu bạn thêm một tuyến đường như vậy, bất kỳ phần mềm trung gian nào mà bạn muốn sử dụng sau các tuyến đường của bạn, như 'express.static', sẽ không bao giờ được gọi, ngay cả khi bạn bao gồm' app.all' sau khai báo phần mềm trung gian đó ([gist ] (https://gist.github.com/robertklep/5608473)). Có thể không phải là một vấn đề, nhưng nó có thể gây nhầm lẫn. – robertklep

Các vấn đề liên quan